using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using SolarPower.Models; using SolarPower.Models.Role; using SolarPower.Repository.Interface; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; namespace SolarPower.Controllers { public class OperationController : MyBaseController { private readonly IOperationRepository operationRepository; public OperationController( IOperationRepository operationRepository) : base() { this.operationRepository = operationRepository; } public IActionResult Index() { return View(); } public IActionResult Record() { return View("~/Views/Operation/OperationRecord.cshtml"); } /// /// 取得電站Option /// /// /// public async Task GetPowerStationSelectOption(int post) { ApiResult> apiResult = new ApiResult>(); try { var PowerStationIdLists = new List(); PowerStationIdLists = await operationRepository.GetPowerStationIdList(myUser.Id) ; apiResult.Code = "0000"; apiResult.Data = PowerStationIdLists; } catch (Exception exception) { apiResult.Code = "9999"; Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message); } apiResult.Msg = errorCode.GetString(apiResult.Code); var result = Json(new { data = apiResult }); return result; } /// /// 儲存計畫 /// /// /// public async Task> SaveOperationPlan(OperationCreatePlanModal post) { ApiResult apiResult = new ApiResult(); try { if (post.Id == 0) { var now = DateTime.Now.ToString("yyyy-MM-dd"); var finalid = await operationRepository.GetCurrentSerialNumber("operation_plan_create", $"PowerStationId = {post.PowerStationId} AND CreatedAt LIKE '%{now}%'"); var newSerialNumber = GetLastSerialNumber(finalid); var OperationPlan = new OperationCreatePlan() { EmailType = post.EmailType, ScheduleNum = post.ScheduleNum, Description = post.Description, WorkDay = post.WorkDay, ScheduleType = post.ScheduleType, SerialNumber = newSerialNumber, StartTime = post.StartTime, PowerStationId = post.PowerStationId, Type = post.Type, PlanId = DateTime.Now.ToString("yyyyMMdd") + newSerialNumber, CreatedBy = myUser.Id }; List properties = new List() { "EmailType", "ScheduleNum", "Description", "WorkDay", "ScheduleType", "SerialNumber", "StartTime", "PowerStationId", "Type", "PlanId", "CreatedBy" }; await operationRepository.AddOperationPlan(OperationPlan, properties); var record = new PlanToRecord() { WorkType = post.Type, PowerStationId = post.PowerStationId, StartTime = post.StartTime, CreatedBy = myUser.Id, EndTime = post.EndTime }; List properties2 = new List() { "WorkType", "PowerStationId", "StartTime", "CreatedBy", "EndTime" }; await operationRepository.AddToRecord(record, properties2); apiResult.Code = "0000"; apiResult.Msg = "新增成功"; } else { var OperationPlan = new OperationCreatePlan() { Id = post.Id, EmailType = post.EmailType, ScheduleNum = post.ScheduleNum, Description = post.Description, WorkDay = post.WorkDay, ScheduleType = post.ScheduleType, StartTime = post.StartTime, PowerStationId = post.PowerStationId, Type = post.Type, UpdatedBy = myUser.Id }; List properties = new List() { "Id", "EmailType", "ScheduleNum", "Description", "WorkDay", "ScheduleType", "StartTime", "PowerStationId", "Type", "UpdatedBy" }; await operationRepository.UpdateOperationPlan(OperationPlan, properties); apiResult.Code = "0000"; apiResult.Msg = "編輯成功"; } } catch (Exception exception) { apiResult.Code = "9999"; Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message); } apiResult.Msg = errorCode.GetString(apiResult.Code); return apiResult; } /// /// 定時計畫datatable /// /// /// public async Task OperationPlanTable(List id) { List OperationPlanTable = new List(); ApiResult> apiResult = new ApiResult>(); try { apiResult.Code = "0000"; OperationPlanTable = await operationRepository.OperationPlanTable(id); foreach (OperationPlanTable a in OperationPlanTable) { if(a.Type == 0) { a.TypeName = "清洗"; } else { a.TypeName = "巡檢"; } if(a.ScheduleType == 0) { a.Schedule = "每" + a.ScheduleNum.ToString() + "天" ; } else if (a.ScheduleType == 1) { a.Schedule = "每" + a.ScheduleNum.ToString() + "周"; } else if (a.ScheduleType == 2) { a.Schedule = "每" + a.ScheduleNum.ToString() + "月"; } else if (a.ScheduleType == 3) { a.Schedule = "每" + a.ScheduleNum.ToString() + "季"; } else if (a.ScheduleType == 4) { a.Schedule = "每" + a.ScheduleNum.ToString() + "年"; } a.StartTimeString = a.StartTime; var crst = a.CreatedAt.Split(" "); a.CreateTimeString = crst[0]; if(a.EmailType == 0) { a.EmailTypeName = "當天"; } else if(a.EmailType == 1) { a.EmailTypeName = "前一天"; } else if (a.EmailType == 2) { a.EmailTypeName = "前兩天"; } else if (a.EmailType == 3) { a.EmailTypeName = "前三天"; } a.Function = @" "; } apiResult.Data = OperationPlanTable; } catch (Exception exception) { apiResult.Code = "9999"; apiResult.Msg = exception.ToString(); } var result = Json(new { data = apiResult }); return result; } /// /// 刪除定時計畫 /// /// /// public async Task> DeleteOneOperationPlan(int Id) { ApiResult apiResult = new ApiResult(); OperationCreatePlan operation = new OperationCreatePlan(); try { operation = await operationRepository.GetOneOperation(Id); if (operation == null) { apiResult.Code = "9998"; apiResult.Msg = errorCode.GetString(apiResult.Code); return apiResult; } await operationRepository.DeleteOneByIdWithCustomTable(Id, "operation_plan_create"); apiResult.Code = "0000"; apiResult.Msg = "刪除成功"; } catch (Exception exception) { apiResult.Code = "9999"; apiResult.Msg = errorCode.GetString(apiResult.Code); Logger.LogError("【" + controllerName + "/" + actionName + "】" + "Id=" + Id); Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message); } return apiResult; } public async Task> GetOneOperationPlan(int Id) { ApiResult apiResult = new ApiResult(); OperationCreatePlan operationCreatePlan = new OperationCreatePlan(); try { apiResult.Code = "0000"; operationCreatePlan = await operationRepository.GetOneOperation(Id); apiResult.Data = operationCreatePlan; } catch (Exception exception) { apiResult.Code = "9999"; apiResult.Msg = exception.ToString(); Logger.LogError("【" + controllerName + "/" + actionName + "】" + "Id=" + Id); Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message); } return apiResult; } /// /// 運維作業記錄列表 /// /// /// [HttpPost] public async Task OperationRecodeListAsync(PostOperationRecodeFilter post) { ApiResult> apiResult = new ApiResult>(); int totalRecords = 0; //總資料筆數 int recFilter = 0; //過濾後資料筆數 List recodes = null; try { //if (!IsPlatformLayer(myUser.Role.Layer)) //{ //如果只是身分公司管理員 或 公司使用者,就只能看自己公司的資料 // post.SelectedCompanyId = myUser.CompanyId; //} recodes = await operationRepository.GetAllRecodeByFilterAsync(post); totalRecords = recodes.Count(); recFilter = recodes.Count(); apiResult.Code = "0000"; apiResult.Data = recodes; } catch (Exception exception) { apiResult.Code = "9999"; string json = System.Text.Json.JsonSerializer.Serialize(post); Logger.LogError("【" + controllerName + "/" + actionName + "】" + json); Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message); } apiResult.Msg = errorCode.GetString(apiResult.Code); var result = Json(new { recordsTotal = totalRecords, recordsFiltered = recFilter, data = apiResult }); return result; } } }