FIC_Solar/SolarPower/Controllers/OperationController.cs
2021-06-23 11:04:09 +08:00

294 lines
10 KiB
C#

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<OperationController>
{
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");
}
/// <summary>
/// 取得電站Option
/// </summary>
/// <param name="post"></param>
/// <returns></returns>
public async Task<ActionResult> GetPowerStationSelectOption(int post)
{
ApiResult<List<PowerStationIdList>> apiResult = new ApiResult<List<PowerStationIdList>>();
try
{
var PowerStationIdLists = new List<PowerStationIdList>();
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;
}
/// <summary>
/// 儲存計畫
/// </summary>
/// <param name="post"></param>
/// <returns></returns>
public async Task<ApiResult<string>> SaveOperationPlan(OperationCreatePlanModal post)
{
ApiResult<string> apiResult = new ApiResult<string>();
try
{
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<string> properties = new List<string>()
{
"EmailType",
"ScheduleNum",
"Description",
"WorkDay",
"ScheduleType",
"SerialNumber",
"StartTime",
"PowerStationId",
"Type",
"PlanId",
"CreatedBy"
};
await operationRepository.AddOperationPlan(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;
}
/// <summary>
/// 定時計畫datatable
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public async Task<ActionResult> OperationPlanTable(List<int> id)
{
List<OperationPlanTable> OperationPlanTable = new List<OperationPlanTable>();
ApiResult<List<OperationPlanTable>> apiResult = new ApiResult<List<OperationPlanTable>>();
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.ToString("yyyy-MM-dd");
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 = @"
<button type='button' class='btn btn-primary btn-pills waves-effect waves-themed edit-btn'>修改</button>
<button type='button' class='btn btn-danger btn-pills waves-effect waves-themed del-btn'>刪除</button>";
}
apiResult.Data = OperationPlanTable;
}
catch (Exception exception)
{
apiResult.Code = "9999";
apiResult.Msg = exception.ToString();
}
var result = Json(new
{
data = apiResult
});
return result;
}
/// <summary>
/// 刪除定時計畫
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public async Task<ApiResult<string>> DeleteOneOperationPlan(int Id)
{
ApiResult<string> apiResult = new ApiResult<string>();
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;
}
/// <summary>
/// 運維作業記錄列表
/// </summary>
/// <param name="post"></param>
/// <returns></returns>
[HttpPost]
public async Task<ActionResult> OperationRecodeListAsync(PostOperationRecodeFilter post)
{
ApiResult<List<OperationRecodeDataTable>> apiResult = new ApiResult<List<OperationRecodeDataTable>>();
int totalRecords = 0; //總資料筆數
int recFilter = 0; //過濾後資料筆數
List<OperationRecodeDataTable> 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;
}
}
}