|
|
@ -1,4 +1,6 @@ |
|
|
|
using Microsoft.AspNetCore.Builder; |
|
|
|
using Hangfire; |
|
|
|
using Microsoft.AspNetCore.Builder; |
|
|
|
using Microsoft.AspNetCore.Http; |
|
|
|
using Microsoft.AspNetCore.Identity.Data; |
|
|
|
using Microsoft.AspNetCore.Mvc; |
|
|
|
using Microsoft.EntityFrameworkCore; |
|
|
@ -6,18 +8,26 @@ using Microsoft.Extensions.Configuration; |
|
|
|
using Microsoft.Extensions.DependencyInjection; |
|
|
|
using Microsoft.Extensions.Hosting; |
|
|
|
using Microsoft.Extensions.Logging; |
|
|
|
using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime; |
|
|
|
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; |
|
|
|
using Omu.ValueInjecter; |
|
|
|
using System; |
|
|
|
using System.Collections.Generic; |
|
|
|
using System.Diagnostics; |
|
|
|
using System.Linq; |
|
|
|
using System.Net.Http.Json; |
|
|
|
using System.Security.Policy; |
|
|
|
using System.Text; |
|
|
|
using System.Text.Encodings.Web; |
|
|
|
using System.Text.Json; |
|
|
|
using System.Text.Json.Serialization; |
|
|
|
using System.Threading.Channels; |
|
|
|
using System.Threading.Tasks; |
|
|
|
using TaskManager.Contracts.Dtos; |
|
|
|
using TaskManager.Entity; |
|
|
|
using TaskManager.EntityFramework; |
|
|
|
using Wood.Entity; |
|
|
|
using Wood.Service.Controllers; |
|
|
|
using Wood.Service.SystemManage; |
|
|
|
|
|
|
|
namespace TaskManager.Controllers |
|
|
@ -73,28 +83,251 @@ namespace TaskManager.Controllers |
|
|
|
|
|
|
|
using var scope = _serviceProvider.CreateScope(); |
|
|
|
var db = scope.ServiceProvider.GetRequiredService<JobDbContext>(); |
|
|
|
|
|
|
|
List<TaskLog> logsToSave = new List<TaskLog>(); |
|
|
|
foreach (var log in logs) |
|
|
|
{ |
|
|
|
if (!string.IsNullOrEmpty(log.Remark)) |
|
|
|
if (!string.IsNullOrEmpty(log.Remark) && log.Type=="请求") |
|
|
|
{ |
|
|
|
log.Path = WriteLogToFile(log.Remark); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
log.Remark = string.Empty; |
|
|
|
logsToSave.Add(log); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//foreach (var log in logsToSave)
|
|
|
|
//{
|
|
|
|
// switch (log.TaskName)
|
|
|
|
// {
|
|
|
|
// case "来料检验数据":
|
|
|
|
|
|
|
|
// //RecurringJob.AddOrUpdate<SupplierProMaterialStockService>(
|
|
|
|
// // task.TaskName,
|
|
|
|
// // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client, pagesize),
|
|
|
|
// // task.Corn,
|
|
|
|
// // TimeZoneInfo.Local
|
|
|
|
// //);
|
|
|
|
// break;
|
|
|
|
// case "排产数据":
|
|
|
|
// //RecurringJob.AddOrUpdate<CherySupplierProSchedulingService>(
|
|
|
|
// // task.TaskName,
|
|
|
|
// // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client, pagesize),
|
|
|
|
// // task.Corn,
|
|
|
|
// // TimeZoneInfo.Local
|
|
|
|
// //);
|
|
|
|
// break;
|
|
|
|
// case "供应商基础信息":
|
|
|
|
// //RecurringJob.AddOrUpdate<CherySupplierInfoService>(
|
|
|
|
// // task.TaskName,
|
|
|
|
// // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client, pagesize),
|
|
|
|
// // task.Corn,
|
|
|
|
// // TimeZoneInfo.Local
|
|
|
|
// //);
|
|
|
|
// break;
|
|
|
|
// case "人员资质信息":
|
|
|
|
// //RecurringJob.AddOrUpdate<CherySupplierEmployeeService>(
|
|
|
|
// // task.TaskName,
|
|
|
|
// // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client, pagesize),
|
|
|
|
// // task.Corn,
|
|
|
|
// // TimeZoneInfo.Local
|
|
|
|
// //);
|
|
|
|
// break;
|
|
|
|
// case "BOM主数据":
|
|
|
|
// //RecurringJob.AddOrUpdate<CherySupplierBomService>(
|
|
|
|
// // task.TaskName,
|
|
|
|
// // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client, pagesize),
|
|
|
|
// // task.Corn,
|
|
|
|
// // TimeZoneInfo.Local
|
|
|
|
// //);
|
|
|
|
// break;
|
|
|
|
// case "过程控制项质量数据":
|
|
|
|
// //RecurringJob.AddOrUpdate<CherySupplierProCpsService>(
|
|
|
|
// // task.TaskName,
|
|
|
|
// // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client, pagesize),
|
|
|
|
// // task.Corn,
|
|
|
|
// // TimeZoneInfo.Local
|
|
|
|
// //);
|
|
|
|
// break;
|
|
|
|
// case "生产过程数据":
|
|
|
|
// //RecurringJob.AddOrUpdate<CherySupplierProDataService>(
|
|
|
|
// // task.TaskName,
|
|
|
|
// // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client, pagesize),
|
|
|
|
// // task.Corn,
|
|
|
|
// // TimeZoneInfo.Local
|
|
|
|
// //);
|
|
|
|
// break;
|
|
|
|
// case "产品一次合格率":
|
|
|
|
// //RecurringJob.AddOrUpdate<CherySupplierProFirstPassyieldService>(
|
|
|
|
// // task.TaskName,
|
|
|
|
// // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client, pagesize),
|
|
|
|
// // task.Corn,
|
|
|
|
// // TimeZoneInfo.Local
|
|
|
|
// //);
|
|
|
|
// break;
|
|
|
|
// case "工位一次合格率":
|
|
|
|
// //RecurringJob.AddOrUpdate<CherySupplierProStationFirstPassyieldService>(
|
|
|
|
// // task.TaskName,
|
|
|
|
// // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client, pagesize),
|
|
|
|
// // task.Corn,
|
|
|
|
// // TimeZoneInfo.Local
|
|
|
|
// //);
|
|
|
|
// break;
|
|
|
|
// case "缺陷业务数据":
|
|
|
|
// //RecurringJob.AddOrUpdate<CherySupplierProFlawService>(
|
|
|
|
// // task.TaskName,
|
|
|
|
// // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client, pagesize),
|
|
|
|
// // task.Corn,
|
|
|
|
// // TimeZoneInfo.Local
|
|
|
|
// //);
|
|
|
|
// break;
|
|
|
|
// case "环境业务数据":
|
|
|
|
// //RecurringJob.AddOrUpdate<CherySupplierProEnvironmentService>(
|
|
|
|
// // task.TaskName,
|
|
|
|
// // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client, pagesize),
|
|
|
|
// // task.Corn,
|
|
|
|
// // TimeZoneInfo.Local
|
|
|
|
// //);
|
|
|
|
// break;
|
|
|
|
// case "设备OEE达成率":
|
|
|
|
// //RecurringJob.AddOrUpdate<CherySupplierProOeeAchievementRateService>(
|
|
|
|
// // task.TaskName,
|
|
|
|
// // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client, pagesize),
|
|
|
|
// // task.Corn,
|
|
|
|
// // TimeZoneInfo.Local
|
|
|
|
// //);
|
|
|
|
// break;
|
|
|
|
// case "OEE时间明细":
|
|
|
|
// //RecurringJob.AddOrUpdate<CherySupplierProOeeTimeDetailsService>(
|
|
|
|
// // task.TaskName,
|
|
|
|
// // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client, pagesize),
|
|
|
|
// // task.Corn,
|
|
|
|
// // TimeZoneInfo.Local
|
|
|
|
// //);
|
|
|
|
// break;
|
|
|
|
// case "物料主数据":
|
|
|
|
// //RecurringJob.AddOrUpdate<CherySupplierProMaterialDataService>(
|
|
|
|
// // task.TaskName,
|
|
|
|
// // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client, pagesize),
|
|
|
|
// // task.Corn,
|
|
|
|
// // TimeZoneInfo.Local
|
|
|
|
// //);
|
|
|
|
// break;
|
|
|
|
// case "附件类数据":
|
|
|
|
// //RecurringJob.AddOrUpdate<CherySupplierProAttachmentDataService>(
|
|
|
|
// // task.TaskName,
|
|
|
|
// // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client, pagesize),
|
|
|
|
// // task.Corn,
|
|
|
|
// // TimeZoneInfo.Local
|
|
|
|
// //);
|
|
|
|
// break;
|
|
|
|
// case "工艺装备":
|
|
|
|
// //RecurringJob.AddOrUpdate<CherySupplierProProcessEquipmentService>(
|
|
|
|
// // task.TaskName,
|
|
|
|
// // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client, pagesize),
|
|
|
|
// // task.Corn,
|
|
|
|
// // TimeZoneInfo.Local
|
|
|
|
// //);
|
|
|
|
// break;
|
|
|
|
// case "工艺":
|
|
|
|
// //RecurringJob.AddOrUpdate<CherySupplierProProcessService>(
|
|
|
|
// // task.TaskName,
|
|
|
|
// // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client, pagesize),
|
|
|
|
// // task.Corn,
|
|
|
|
// // TimeZoneInfo.Local
|
|
|
|
// //);
|
|
|
|
// break;
|
|
|
|
|
|
|
|
// case "整车月度生产计划1":
|
|
|
|
// var planlingResult1 = Response<SUPPLIER_PRO_PLANING, SUPPLIER_PRO_PLANING_DETIAL_DTO>(log.Remark, log.Version,log.TaskId,db);
|
|
|
|
// break;
|
|
|
|
// case "M+6月物料需求计划1":
|
|
|
|
// var monthResult = Response<SUPPLIER_MRP_MONTH, SUPPLIER_MRP_MONTH_DETAIL_DTO>(log.Remark, log.Version,log.TaskId,db);
|
|
|
|
// break;
|
|
|
|
// case "整车月度生产计划2":
|
|
|
|
// var planlingResult2=Response<SUPPLIER_PRO_PLANING, SUPPLIER_PRO_PLANING_DETIAL_DTO>(log.Remark,log.Version, log.TaskId, db);
|
|
|
|
// break;
|
|
|
|
// case "M+6月物料需求计划2":
|
|
|
|
// var monthResult2 = Response<SUPPLIER_MRP_MONTH, SUPPLIER_MRP_MONTH_DETAIL_DTO>(log.Remark, log.Version,log.TaskId,db);
|
|
|
|
// break;
|
|
|
|
// case "日物料需求计划":
|
|
|
|
// var dateResult2 = Response<SUPPLIER_MRP_DATE, SUPPLIER_MRP_DATE_DETAIL_DTO>(log.Remark, log.Version, log.TaskId, db);
|
|
|
|
// break;
|
|
|
|
// case "计划协议":
|
|
|
|
// var weekResult = Response<SUPPLIER_SA_WEEK, SUPPLIER_SA_WEEK_DETAIL_DTO>(log.Remark, log.Version, log.TaskId, db);
|
|
|
|
// break;
|
|
|
|
// case "采购订单":
|
|
|
|
// var poResult = Response<SUPPLIER_PO, SUPPLIER_PO_DETAIL_DTO>(log.Remark, log.Version, log.TaskId, db);
|
|
|
|
// break;
|
|
|
|
// case "过焊装未过总装":
|
|
|
|
// var GHResult = Response<SUPPLIER_PRO_HSCHEDUL, SUPPLIER_PO_DETAIL_DTO>(log.Remark, log.Version, log.TaskId, db);
|
|
|
|
// break;
|
|
|
|
// case "过涂装未过总装":
|
|
|
|
// var TSResult = Response<SUPPLIER_PRO_TSCHEDUL, SUPPLIER_PRO_TSCHEDUL_DETAIL_DTO>(log.Remark, log.Version, log.TaskId, db);
|
|
|
|
// break;
|
|
|
|
// case "排序供货":
|
|
|
|
// var CSResult = Response<SUPPLIER_PRO_CSCHEDUL, SUPPLIER_PRO_CSCHEDUL_DETAIL_DTO>(log.Remark, log.Version, log.TaskId, db);
|
|
|
|
// break;
|
|
|
|
// case "看板配送单":
|
|
|
|
// var DELResult = Response<SUPPLIER_DEL_STATE, SUPPLIER_DEL_STATE_DETAIL_DTO>(log.Remark, log.Version, log.TaskId, db);
|
|
|
|
// break;
|
|
|
|
// case "退货单":
|
|
|
|
// var ReturnResult = Response<SUPPLIER_RETURN, SUPPLIER_RETURN_DETAIL_DTO>(log.Remark, log.Version, log.TaskId, db);
|
|
|
|
// break;
|
|
|
|
// case "奇瑞RDC共享库存":
|
|
|
|
// var InvDataResult = Response<SUPPLIER_INV_DATA, SUPPLIER_INV_DATA_DETAIL_DTO>(log.Remark, log.Version, log.TaskId, db);
|
|
|
|
// break;
|
|
|
|
// case "日MRP状态监控":
|
|
|
|
// var MrpDateResult = Response<SUPPLIER_MRP_DATE, SUPPLIER_MRP_DATE_DETAIL_DTO>(log.Remark, log.Version, log.TaskId, db);
|
|
|
|
// break;
|
|
|
|
// case "日MRP预警推移":
|
|
|
|
// var WarningResult = Response<SUPPLIER_MRP_WARNING, SUPPLIER_MRP_WARNING_DETAIL_DTO>(log.Remark, log.Version, log.TaskId, db);
|
|
|
|
// break;
|
|
|
|
// case "M+6月物料需求计划风险确认":
|
|
|
|
|
|
|
|
|
|
|
|
// //RecurringJob.AddOrUpdate<CherySupplierConMmrpService>(
|
|
|
|
// // task.TaskName,
|
|
|
|
// // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client, pagesize),
|
|
|
|
// // task.Corn,
|
|
|
|
// // TimeZoneInfo.Local
|
|
|
|
// //);
|
|
|
|
// break;
|
|
|
|
// case "日物料需求计划风险确认":
|
|
|
|
// //RecurringJob.AddOrUpdate<CherySupplierConDateService>(
|
|
|
|
// // task.TaskName,
|
|
|
|
// // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client, pagesize),
|
|
|
|
// // task.Corn,
|
|
|
|
// // TimeZoneInfo.Local
|
|
|
|
// //);
|
|
|
|
// break;
|
|
|
|
// case "采购订单风险确认":
|
|
|
|
// //RecurringJob.AddOrUpdate<CherySupplierConPoService>(
|
|
|
|
// // task.TaskName,
|
|
|
|
// // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client, pagesize),
|
|
|
|
// // task.Corn,
|
|
|
|
// // TimeZoneInfo.Local
|
|
|
|
// //);
|
|
|
|
// break;
|
|
|
|
// case "供应商共享库存-上午":
|
|
|
|
|
|
|
|
// //RecurringJob.AddOrUpdate<CherySupplierSinvDataService>(
|
|
|
|
// // task.TaskName,
|
|
|
|
// // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client, pagesize),
|
|
|
|
// // task.Corn,
|
|
|
|
// // TimeZoneInfo.Local
|
|
|
|
// //);
|
|
|
|
// break;
|
|
|
|
// case "供应商共享库存-晚上":
|
|
|
|
// //RecurringJob.AddOrUpdate<CherySupplierSinvDataService>(
|
|
|
|
// // task.TaskName,
|
|
|
|
// // x => ((IDoExecute)x).ExecuteAsync(url, path, task.TaskName, client, pagesize),
|
|
|
|
// // task.Corn,
|
|
|
|
// // TimeZoneInfo.Local
|
|
|
|
// //);
|
|
|
|
// break;
|
|
|
|
// }
|
|
|
|
//}
|
|
|
|
await db.TaskLogs.AddRangeAsync(logsToSave, stoppingToken); |
|
|
|
await db.SaveChangesAsync(stoppingToken); |
|
|
|
|
|
|
|
|
|
|
|
_logger.LogInformation($"已写入 {logs.Count} 条日志"); |
|
|
|
} |
|
|
|
} |
|
|
@ -150,9 +383,50 @@ namespace TaskManager.Controllers |
|
|
|
return null; |
|
|
|
} |
|
|
|
} |
|
|
|
private List<T> Response<T,TDTO>(string jsonContent,string version,Guid taskid,JobDbContext dbContext) |
|
|
|
where T:CherryReadBaseEntity,new() where TDTO:class,new() |
|
|
|
{ |
|
|
|
|
|
|
|
List<T> result = new List<T>(); |
|
|
|
try |
|
|
|
{ |
|
|
|
// 解析字符串为DateTime对象
|
|
|
|
DateTime date = DateTime.ParseExact(version, "yyyyMMdd", null); |
|
|
|
// 格式化为目标字符串
|
|
|
|
string formattedDate = date.ToString("yyyy-MM-dd"); |
|
|
|
if (!string.IsNullOrEmpty(jsonContent)) |
|
|
|
{ |
|
|
|
var options = new JsonSerializerOptions |
|
|
|
{ |
|
|
|
PropertyNamingPolicy = JsonNamingPolicy.CamelCase, |
|
|
|
Converters = { |
|
|
|
new JsonStringEnumConverter(), // 枚举转换
|
|
|
|
new CustomDateTimeConverter("yyyy-MM-dd HH:mm:ss","yyyy-MM-dd") // 日期转换
|
|
|
|
} |
|
|
|
}; |
|
|
|
var res = JsonSerializer.Deserialize<PagedResponse<TDTO>>(jsonContent, options); |
|
|
|
var rows = res.Data.Rows; |
|
|
|
|
|
|
|
List<T> entities = new List<T>(); |
|
|
|
foreach (var itm in res.Data.Rows) |
|
|
|
{ |
|
|
|
T entity = new T(); |
|
|
|
entity.InjectFrom(itm); |
|
|
|
entity.CreationTime = DateTime.Now; |
|
|
|
entity.RequestDate = formattedDate; |
|
|
|
entity.TaskId = taskid; |
|
|
|
result.Add(entity); |
|
|
|
} |
|
|
|
dbContext.BulkMerge(result,options=>options.ColumnPrimaryKeyExpression=x=>new { x.Id, x.RequestDate }); |
|
|
|
} |
|
|
|
} |
|
|
|
catch (Exception ex) |
|
|
|
{ |
|
|
|
_logger.LogError(ex, "JSON字符串解析失败:jsonContent"); |
|
|
|
|
|
|
|
} |
|
|
|
return result; |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|