171 lines
6.5 KiB
C#
171 lines
6.5 KiB
C#
using Microsoft.Extensions.Logging;
|
||
using Quartz;
|
||
using SolarPower.Models;
|
||
using SolarPower.Repository.Interface;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Threading;
|
||
using System.Threading.Tasks;
|
||
|
||
namespace SolarPower.Quartz.Jobs
|
||
{
|
||
[DisallowConcurrentExecution]
|
||
public class OperationScheduleJob : IJob
|
||
{
|
||
private readonly ILogger<OperationScheduleJob> logger;
|
||
private IOperationRepository operationRepository;
|
||
|
||
public OperationScheduleJob(ILogger<OperationScheduleJob> logger, IOperationRepository operationRepository)
|
||
{
|
||
this.logger = logger;
|
||
this.operationRepository = operationRepository;
|
||
}
|
||
|
||
public async Task Execute(IJobExecutionContext context)
|
||
{
|
||
try
|
||
{
|
||
var getTime = await operationRepository.GetOperationSchedules();
|
||
foreach (var a in getTime)
|
||
{
|
||
DateTime Updatedtime;
|
||
var useday = a.LastCreateTime;
|
||
if(a.LastCreateTime == "0001-01-01 00:00:00")
|
||
{
|
||
useday = a.StartTime;
|
||
}
|
||
|
||
|
||
if (a.ScheduleType == 0)//日
|
||
{
|
||
Updatedtime = Convert.ToDateTime(useday).AddDays(a.ScheduleNum);
|
||
}
|
||
else if (a.ScheduleType == 1)//周
|
||
{
|
||
Updatedtime = Convert.ToDateTime(useday).AddDays(a.ScheduleNum * 7);
|
||
}
|
||
else if (a.ScheduleType == 2)//月
|
||
{
|
||
Updatedtime = Convert.ToDateTime(useday).AddMonths(a.ScheduleNum);
|
||
}
|
||
else if (a.ScheduleType == 3)//季
|
||
{
|
||
Updatedtime = Convert.ToDateTime(useday).AddMonths(a.ScheduleNum * 3);
|
||
}
|
||
else // 年
|
||
{
|
||
Updatedtime = Convert.ToDateTime(useday).AddYears(a.ScheduleNum);
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
if (Updatedtime < DateTime.Now)
|
||
{
|
||
var now = DateTime.Now.ToString("yyyy-MM-dd");
|
||
var OperationPlan = new OperationCreatePlan()
|
||
{
|
||
Id = a.Id,
|
||
EmailType = a.EmailType,
|
||
ScheduleNum = a.ScheduleNum,
|
||
Description = a.Description,
|
||
WorkDay = a.WorkDay,
|
||
ScheduleType = a.ScheduleType,
|
||
StartTime = a.StartTime,
|
||
PowerStationId = a.PowerStationId,
|
||
Type = a.Type,
|
||
UpdatedBy = a.UpdatedBy,
|
||
LastCreateTime = Updatedtime.ToString("yyyy-MM-dd")
|
||
};
|
||
List<string> properties = new List<string>()
|
||
{
|
||
"Id",
|
||
"EmailType",
|
||
"ScheduleNum",
|
||
"Description",
|
||
"WorkDay",
|
||
"ScheduleType",
|
||
"StartTime",
|
||
"PowerStationId",
|
||
"Type",
|
||
"UpdatedBy",
|
||
"LastCreateTime"
|
||
};
|
||
await operationRepository.UpdateOperationPlan(OperationPlan, properties);
|
||
|
||
|
||
|
||
string endtime = "";
|
||
switch (a.ScheduleType)
|
||
{
|
||
case 0:
|
||
endtime = (Convert.ToDateTime(Updatedtime.ToString("yyyy-MM-dd")).AddDays(a.ScheduleNum)).ToString("yyyy-MM-dd 00:00:00"); break;
|
||
case 1:
|
||
endtime = (Convert.ToDateTime(Updatedtime.ToString("yyyy-MM-dd")).AddDays(a.ScheduleNum * 7)).ToString("yyyy-MM-dd 00:00:00"); break;
|
||
case 2:
|
||
endtime = (Convert.ToDateTime(Updatedtime.ToString("yyyy-MM-dd")).AddMonths(a.ScheduleNum)).ToString("yyyy-MM-dd 00:00:00"); break;
|
||
case 3:
|
||
endtime = (Convert.ToDateTime(Updatedtime.ToString("yyyy-MM-dd")).AddMonths(a.ScheduleNum * 3)).ToString("yyyy-MM-dd 00:00:00"); break;
|
||
case 4:
|
||
endtime = (Convert.ToDateTime(Updatedtime.ToString("yyyy-MM-dd")).AddYears(a.ScheduleNum * 3)).ToString("yyyy-MM-dd 00:00:00"); break;
|
||
}
|
||
var record = new PlanToRecord()
|
||
{
|
||
WorkType = a.Type,
|
||
PowerStationId = a.PowerStationId,
|
||
StartTime = a.StartTime,
|
||
CreatedBy = a.CreatedBy,
|
||
EndTime = endtime
|
||
};
|
||
List<string> properties2 = new List<string>()
|
||
{
|
||
"WorkType",
|
||
"PowerStationId",
|
||
"StartTime",
|
||
"CreatedBy",
|
||
"EndTime"
|
||
};
|
||
|
||
}
|
||
|
||
}
|
||
}
|
||
catch (Exception exception)
|
||
{
|
||
logger.LogError("【{0}】{1}", nameof(logger), exception.Message);
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 取得最新的流水號
|
||
/// </summary>
|
||
/// <param name="current">當前的</param>
|
||
/// <param name="pad"></param>
|
||
/// <param name="direction">0: PadLeft;1: PadRight</param>
|
||
/// <returns></returns>
|
||
public string GetLastSerialNumber(string current = "", int pad = 4, byte direction = 0)
|
||
{
|
||
var tempSerialNumber = 0;
|
||
if (!string.IsNullOrEmpty(current))
|
||
{
|
||
tempSerialNumber = Convert.ToInt32(current) + 1;
|
||
}
|
||
else
|
||
{
|
||
tempSerialNumber = 1;
|
||
}
|
||
|
||
if (direction == 0)
|
||
{
|
||
return tempSerialNumber.ToString().Trim().PadLeft(pad, '0');
|
||
}
|
||
else
|
||
{
|
||
return tempSerialNumber.ToString().Trim().PadRight(pad, '0');
|
||
}
|
||
}
|
||
}
|
||
}
|