Browse Source

更新版本

master
赵新宇 4 weeks ago
parent
commit
5983c2e22b
  1. 11
      API/CherryTaskManager/Program.cs
  2. 2
      API/TaskManager.Entity/Entity.cs
  3. 10260
      API/TaskManager.EntityFramework/Migrations/20250620033738_z202506200001.Designer.cs
  4. 38
      API/TaskManager.EntityFramework/Migrations/20250620033738_z202506200001.cs
  5. 3
      API/TaskManager.EntityFramework/Migrations/JobDbContextModelSnapshot.cs
  6. 15
      API/Wood.Admin.WebApi/Properties/PublishProfiles/FolderProfile.pubxml
  7. 9
      API/Wood.Admin.WebApi/Properties/PublishProfiles/FolderProfile.pubxml.user
  8. 6
      API/Wood.Admin.WebApi/Wood.Admin.WebApi.csproj.user
  9. 4
      API/Wood.Service/Controllers/CheryRecurringJobInputPageController.cs
  10. 31
      API/Wood.Service/Controllers/CheryRecurringJobInputPageExtendController.cs
  11. 4
      API/Wood.Service/Controllers/CherySupplierConMmrpService.cs
  12. 5
      API/Wood.Service/Controllers/CherySupplierConPoService.cs
  13. 2
      API/Wood.Service/Controllers/RecurringJobBaseController.cs
  14. 211
      API/Wood.Service/Controllers/TaskConifgureController.cs

11
API/CherryTaskManager/Program.cs

@ -25,17 +25,6 @@ var builder = WebApplication.CreateBuilder(args);
var defaultConnection = builder.Configuration.GetConnectionString("Default"); var defaultConnection = builder.Configuration.GetConnectionString("Default");
builder.Services.AddHttpClient(); builder.Services.AddHttpClient();
//builder.Services.AddScoped<LogController>();
//builder.Services.AddScoped<SUPPLIER_PRO_PLANING_CONTROLLER>();
//builder.Services.AddScoped<TaskConifgureController>();
//builder.Services.AddControllers()
// .AddJsonOptions(options =>
// {
// options.JsonSerializerOptions.Converters.Add(new CustomDateTimeConverter("yyyy-MM-dd HH:mm:ss"));
// options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
// });
// 添加服务到容器 // 添加服务到容器
builder.Services.AddControllers(); builder.Services.AddControllers();

2
API/TaskManager.Entity/Entity.cs

@ -383,7 +383,7 @@ namespace TaskManager.Entity
/// 失败详情(记录失败原因、异常堆栈等信息,支持长文本) /// 失败详情(记录失败原因、异常堆栈等信息,支持长文本)
/// </summary> /// </summary>
[ExporterHeader(DisplayName = "失败信息")] [ExporterHeader(DisplayName = "失败信息")]
[MaxLength(30)]
public string? FailedInfo { get; set; } public string? FailedInfo { get; set; }
/// <summary> /// <summary>

10260
API/TaskManager.EntityFramework/Migrations/20250620033738_z202506200001.Designer.cs

File diff suppressed because it is too large

38
API/TaskManager.EntityFramework/Migrations/20250620033738_z202506200001.cs

@ -0,0 +1,38 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace TaskManager.EntityFramework.Migrations
{
/// <inheritdoc />
public partial class z202506200001 : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<string>(
name: "FailedInfo",
table: "TaskSub",
type: "nvarchar(max)",
nullable: true,
oldClrType: typeof(string),
oldType: "nvarchar(30)",
oldMaxLength: 30,
oldNullable: true);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<string>(
name: "FailedInfo",
table: "TaskSub",
type: "nvarchar(30)",
maxLength: 30,
nullable: true,
oldClrType: typeof(string),
oldType: "nvarchar(max)",
oldNullable: true);
}
}
}

3
API/TaskManager.EntityFramework/Migrations/JobDbContextModelSnapshot.cs

@ -10206,8 +10206,7 @@ namespace TaskManager.EntityFramework.Migrations
.HasColumnType("int"); .HasColumnType("int");
b.Property<string>("FailedInfo") b.Property<string>("FailedInfo")
.HasMaxLength(30) .HasColumnType("nvarchar(max)");
.HasColumnType("nvarchar(30)");
b.Property<bool>("ReadState") b.Property<bool>("ReadState")
.HasColumnType("bit"); .HasColumnType("bit");

15
API/Wood.Admin.WebApi/Properties/PublishProfiles/FolderProfile.pubxml

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- https://go.microsoft.com/fwlink/?LinkID=208121. -->
<Project>
<PropertyGroup>
<DeleteExistingFiles>false</DeleteExistingFiles>
<ExcludeApp_Data>false</ExcludeApp_Data>
<LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<PublishProvider>FileSystem</PublishProvider>
<PublishUrl>bin\Release\net8.0\publish\</PublishUrl>
<WebPublishMethod>FileSystem</WebPublishMethod>
<_TargetId>Folder</_TargetId>
</PropertyGroup>
</Project>

9
API/Wood.Admin.WebApi/Properties/PublishProfiles/FolderProfile.pubxml.user

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- https://go.microsoft.com/fwlink/?LinkID=208121. -->
<Project>
<PropertyGroup>
<_PublishTargetUrl>D:\QRAPI20250528\API\Wood.Admin.WebApi\bin\Release\net8.0\publish\</_PublishTargetUrl>
<History>True|2025-06-19T09:18:07.6086155Z||;</History>
<LastFailureDetails />
</PropertyGroup>
</Project>

6
API/Wood.Admin.WebApi/Wood.Admin.WebApi.csproj.user

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<NameOfLastUsedPublishProfile>D:\QRAPI20250528\API\Wood.Admin.WebApi\Properties\PublishProfiles\FolderProfile.pubxml</NameOfLastUsedPublishProfile>
</PropertyGroup>
</Project>

4
API/Wood.Service/Controllers/CheryRecurringJobInputPageController.cs

@ -71,9 +71,7 @@ namespace TaskManager.Controllers
CPageSize = first.PageSize; CPageSize = first.PageSize;
await SyncTaskSubTable(TaskName, Client); await SyncTaskSubTable(TaskName, Client);
//BackgroundJob.Schedule(() => SyncTaskSubTable(TaskName, Client),TimeSpan.FromSeconds(2));
// var jobId1 = BackgroundJob.Enqueue(taskName+Guid.NewGuid().ToString("N"),() => SyncTaskSubTable(TaskName, Client));
} }
catch (Exception ex) { catch (Exception ex) {
await _logger.AddError(ex.Message, TaskName, Guid.NewGuid(), DateTime.Now.ToString("yyyyMMdd")); await _logger.AddError(ex.Message, TaskName, Guid.NewGuid(), DateTime.Now.ToString("yyyyMMdd"));

31
API/Wood.Service/Controllers/CheryRecurringJobInputPageExtendController.cs

@ -53,11 +53,12 @@ namespace TaskManager.Controllers
/// <param name="client">客户(Chery)</param> /// <param name="client">客户(Chery)</param>
/// <returns></returns> /// <returns></returns>
[HttpGet] [HttpGet]
public virtual async Task CustomInvokeAsync(string taskName, string client) public virtual async Task CustomInvokeAsync(string taskName, string client,Guid taskId)
{ {
try try
{ {
var first = _jobDbContext.TaskConifgure.FirstOrDefault(p => p.TaskName == taskName && p.Client == client); var first = _jobDbContext.TaskConifgure.FirstOrDefault(p => p.TaskName == taskName && p.Client == client);
if (first == null) if (first == null)
{ {
return; return;
@ -67,10 +68,22 @@ namespace TaskManager.Controllers
TaskName = first.TaskName; TaskName = first.TaskName;
Client = client; Client = client;
CPageSize = first.PageSize; CPageSize = first.PageSize;
//await SyncTaskSubTable(TaskName, Client); List<string> errorlist = new List<string>();
//var jobId1 = BackgroundJob.Enqueue((()=>SyncTaskSubTable(TaskName,Client))); await SyncTaskSubTable(TaskName, Client,errorlist);
await SyncTaskSubTable(TaskName, Client); var taskSub = _jobDbContext.TaskSub.FirstOrDefault(p => p.TaskId == taskId && p.TaskName == TaskName);
//BackgroundJob.Schedule(() =>(CheryRecurringJobInputPageExtendController<,,>).SyncTaskSubTable(TaskName, Client), TimeSpan.FromSeconds(2)); if (errorlist.Count > 0)
{
taskSub.WriteState =false;
taskSub.FailedInfo = string.Join(",", errorlist);
}
else
{
taskSub.WriteState =true ;
}
_jobDbContext.Update(taskSub);
await _jobDbContext.SaveChangesAsync();
} }
catch (Exception ex) catch (Exception ex)
@ -196,7 +209,7 @@ namespace TaskManager.Controllers
} }
private async Task SyncTaskSubTable(string taskName, string client) private async Task SyncTaskSubTable(string taskName, string client,List<string> errorList = null)
{ {
var task= _jobDbContext.TaskConifgure.FirstOrDefault(p => p.TaskName == taskName); var task= _jobDbContext.TaskConifgure.FirstOrDefault(p => p.TaskName == taskName);
if (task == null) if (task == null)
@ -347,8 +360,12 @@ namespace TaskManager.Controllers
} }
); );
} }
if (errorList != null)
{
errorList.Add($"第 {i} 页数据保存失败,请检查数据:{result.message}。");
}
await _logger.AddError($"第 {i} 页数据保存失败,请检查数据:{result.message}。", TaskName, taskId,version, inputjson); await _logger.AddError($"第 {i} 页数据保存失败,请检查数据:{result.message}。", TaskName, taskId,version, inputjson);
break;
} }
await Task.Delay(200); await Task.Delay(200);

4
API/Wood.Service/Controllers/CherySupplierConMmrpService.cs

@ -62,8 +62,8 @@ namespace TaskManager.Controllers
task.Subscriber = "Chery"; task.Subscriber = "Chery";
task.TableName = "SUPPLIER_CON_MMRP"; task.TableName = "SUPPLIER_CON_MMRP";
task.DataCount = entites.Count; task.DataCount = entites.Count;
task.Domain = "1"; task.Domain = "安通林";
task.Site = "1"; task.Site = "安通林";
task.FailedCount = 0; task.FailedCount = 0;
task.CreateTime = DateTime.Now; task.CreateTime = DateTime.Now;
task.CreateUser = "admin"; task.CreateUser = "admin";

5
API/Wood.Service/Controllers/CherySupplierConPoService.cs

@ -63,9 +63,10 @@ namespace TaskManager.Controllers
task.Subscriber = "Chery"; task.Subscriber = "Chery";
task.TableName = "SUPPLIER_CON_PO"; task.TableName = "SUPPLIER_CON_PO";
task.DataCount = entites.Count; task.DataCount = entites.Count;
task.Domain = "1"; task.Domain = "安通林";
task.Site = "1"; task.Site = "安通林";
task.FailedCount = 0; task.FailedCount = 0;
task.Remark = "手工创建";
task.CreateTime = DateTime.Now; task.CreateTime = DateTime.Now;
task.CreateUser = "admin"; task.CreateUser = "admin";
task.CreationTime = DateTime.Now; task.CreationTime = DateTime.Now;

2
API/Wood.Service/Controllers/RecurringJobBaseController.cs

@ -34,9 +34,7 @@ namespace TaskManager.Controllers
protected string Client { set; get; } = "Chery"; protected string Client { set; get; } = "Chery";
protected string Path { set; get; } = "/v2/get/supplierProPlaning"; protected string Path { set; get; } = "/v2/get/supplierProPlaning";
protected string Url { set; get; } = "/v2/get/supplierProPlaning"; protected string Url { set; get; } = "/v2/get/supplierProPlaning";
protected int CPageSize { set; get; } = 1000; protected int CPageSize { set; get; } = 1000;
protected virtual string TaskName { set; get; } = "SupplierProPlaning"; protected virtual string TaskName { set; get; } = "SupplierProPlaning";
protected readonly LogController _logger; protected readonly LogController _logger;

211
API/Wood.Service/Controllers/TaskConifgureController.cs

@ -1,10 +1,4 @@
using System; using Hangfire;
using System.Data;
using System.IO;
using System.Linq.Expressions;
using System.Security.Policy;
using System.Threading.Tasks;
using Hangfire;
using Magicodes.ExporterAndImporter.Excel; using Magicodes.ExporterAndImporter.Excel;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
@ -13,6 +7,14 @@ using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.VisualBasic; using Microsoft.VisualBasic;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Numeric;
using SqlSugar;
using System;
using System.Data;
using System.IO;
using System.Linq.Expressions;
using System.Security.Policy;
using System.Threading.Tasks;
using TaskManager.Controllers; using TaskManager.Controllers;
using TaskManager.Entity; using TaskManager.Entity;
using TaskManager.EntityFramework; using TaskManager.EntityFramework;
@ -68,9 +70,200 @@ namespace TaskManager.Controllers
} }
/// <summary>
[HttpGet]
public virtual async Task<IActionResult> CustomInvokeAsync(string taskName, string client)
{
var taskcount = _context.TaskSub.Count(p => p.TaskName == taskName && p.WriteState == false);
if (taskcount>0)
{
return new JsonResult(new
{
code = 400,
message = "请勿重复执行任务"
});
}
var taskfirst=_context.TaskConifgure.FirstOrDefault(p => p.TaskName == taskName && p.Client == client);
if (taskfirst == null || taskfirst.IsAuto == true)
{
return new JsonResult(new
{
code = 400,
message = $"任务设置为自动执行或接口设置表不在{taskName}设置"
});
}
TaskSub sub = new TaskSub();
sub.Subscriber = "Cherry";
var taskId = Guid.NewGuid();
var task = new TaskSub();
task.TaskId = taskId;
task.TaskName = taskfirst.TaskName;
task.Subscriber = "Chery";
task.TableName =taskfirst.TableName;
task.DataCount = 1;
task.Domain = "安通林";
task.Site = "安通林";
task.FailedCount = 0;
task.CreateTime = DateTime.Now;
task.CreateUser = "admin";
task.CreationTime = DateTime.Now;
task.SyncedPageCount = 0;
task.ReadState = true;
_context.TaskSub.Add(task);
_context.SaveChanges();
await Task.Delay(TimeSpan.FromSeconds(3));
switch (taskName)
{
case "来料检验数据":
BackgroundJob.Schedule<SupplierProMaterialStockService>(
//"materialstock",
x => x.CustomInvokeAsync(taskName, client, taskId),
TimeSpan.FromSeconds(10)
);
break;
case "排产数据":
BackgroundJob.Schedule<CherySupplierProSchedulingService>(
//"scheduling",
x => x.CustomInvokeAsync(taskName, client, taskId),
TimeSpan.FromSeconds(10)
);
break;
case "供应商基础信息":
BackgroundJob.Schedule<CherySupplierInfoService>(
//"info",
x => x.CustomInvokeAsync(taskName, client),
TimeSpan.FromSeconds(10)
);
break;
case "人员资质信息":
BackgroundJob.Schedule<CherySupplierEmployeeService>(
//"employee",
x => x.CustomInvokeAsync(taskName, client),
TimeSpan.FromSeconds(10)
);
break;
case "BOM主数据":
BackgroundJob.Schedule<CherySupplierBomService>(
//"bom",
x => x.CustomInvokeAsync(taskName, client, taskId),
TimeSpan.FromSeconds(10)
);
break;
case "过程控制项质量数据":
BackgroundJob.Schedule<CherySupplierProCpsService>(
//"cps",
x => x.CustomInvokeAsync(taskName, client, taskId),
TimeSpan.FromSeconds(10)
);
break;
case "生产过程数据":
BackgroundJob.Schedule<CherySupplierProDataService>(
//"data",
x => x.CustomInvokeAsync(taskName, client, taskId),
TimeSpan.FromSeconds(10)
);
break;
case "产品一次合格率":
BackgroundJob.Schedule<CherySupplierProFirstPassyieldService>(
// "firstpassyield",
x => x.CustomInvokeAsync(taskName, client, taskId),
TimeSpan.FromSeconds(10)
);
break;
case "工位一次合格率":
BackgroundJob.Schedule<CherySupplierProStationFirstPassyieldService>(
//"stationfirstpassyield",
x => x.CustomInvokeAsync(taskName, client, taskId),
TimeSpan.FromSeconds(10)
);
break;
case "缺陷业务数据":
BackgroundJob.Schedule<CherySupplierProFlawService>(
//"flaw",
x => x.CustomInvokeAsync(taskName, client, taskId),
TimeSpan.FromSeconds(10)
);
break;
case "环境业务数据":
BackgroundJob.Schedule<CherySupplierProEnvironmentService>(
//"environment",
x => x.CustomInvokeAsync(taskName, client),
TimeSpan.FromSeconds(10)
);
break;
case "设备OEE达成率":
BackgroundJob.Schedule<CherySupplierProOeeAchievementRateService>(
//"oeeachievementrate",
x => x.CustomInvokeAsync(taskName, client),
TimeSpan.FromSeconds(10)
);
break;
case "OEE时间明细":
BackgroundJob.Schedule<CherySupplierProOeeTimeDetailsService>(
//"oeetimedetails",
x => x.CustomInvokeAsync(taskName, client),
TimeSpan.FromSeconds(10)
);
break;
case "物料主数据":
BackgroundJob.Schedule<CherySupplierProMaterialDataService>(
//"maaterialdata", // 注意:这里可能存在拼写错误,原始代码中也有
x => x.CustomInvokeAsync(taskName, client, taskId),
TimeSpan.FromSeconds(10)
);
break;
case "附件类数据":
BackgroundJob.Schedule<CherySupplierProAttachmentDataService>(
// "attachmentdata",
x => x.CustomInvokeAsync(taskName, client),
TimeSpan.FromSeconds(10)
);
break;
case "工艺装备":
BackgroundJob.Schedule<CherySupplierProProcessEquipmentService>(
//"processequipment",
x => x.CustomInvokeAsync(taskName, client),
TimeSpan.FromSeconds(10)
);
break;
case "工艺":
BackgroundJob.Schedule<CherySupplierProProcessService>(
// "process",
x => x.CustomInvokeAsync(taskName, client, taskId),
TimeSpan.FromSeconds(10)
);
break;
}
return new JsonResult(new
{
code = 200,
message = "创建任务成功!"
});
//await SyncTaskSubTable(TaskName, Client);
}
/// <summary>
/// 设置任务是否自动执行 /// 设置任务是否自动执行
/// </summary> /// </summary>
[HttpGet] [HttpGet]

Loading…
Cancel
Save