Browse Source

更新版本

master
zxy 2 weeks ago
parent
commit
9a019b227c
  1. 81
      API/TaskManager.Entity/Entity.cs
  2. 74
      API/Wood.Service/Controllers/CheryRecurringJobInputPageController.cs
  3. 157
      API/Wood.Service/Controllers/CheryRecurringJobOutPageController.cs
  4. 100
      API/Wood.Service/Controllers/NormalBaseController.cs
  5. 18
      API/Wood.Service/Controllers/TaskAllocationService.cs
  6. 18
      API/Wood.Service/Controllers/TaskSubService.cs
  7. 2
      API/Wood.Service/Datas/SupplierEmployeeDtService.cs
  8. 2
      API/Wood.Service/Datas/SupplierInfoDtService.cs
  9. 2
      API/Wood.Service/Datas/SupplierProAttachmentDataDtService.cs
  10. 2
      API/Wood.Service/Datas/SupplierProProcessEquipmentDtService.cs

81
API/TaskManager.Entity/Entity.cs

@ -1,6 +1,4 @@
using Magicodes.ExporterAndImporter.Core;
using Newtonsoft.Json;
using System;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
@ -8,6 +6,9 @@ using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
using System.Xml.Linq;
using Magicodes.ExporterAndImporter.Core;
using Newtonsoft.Json;
namespace TaskManager.Entity
{
@ -19,30 +20,31 @@ namespace TaskManager.Entity
}
public class TaskConifgure:BaseEntity
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[ExporterHeader(IsIgnore = true)]
public long UId { get; set; }
/// <summary>
/// API路径
/// </summary>
[ExporterHeader(DisplayName = "API路径")]
[ImporterHeader(Name = "API路径")]
public string? Api { get; set; }
/// <summary>
/// 任务周期设置
/// </summary>
[ExporterHeader(DisplayName = "任务周期设置")]
[ImporterHeader(Name = "任务周期设置")]
public string? Corn { get; set; }
/// <summary>
/// 模块
/// </summary>
[ExporterHeader(IsIgnore = true)]
[ImporterHeader(IsIgnore = true)]
public string? Module { get; set; }
/// <summary>
/// 模块
/// </summary>
[ExporterHeader(IsIgnore = true)]
[ExporterHeader(DisplayName = "客户")]
[ImporterHeader(Name = "客户")]
public string? Client { get; set; }
@ -50,11 +52,14 @@ namespace TaskManager.Entity
/// 备注
/// </summary>
[ExporterHeader(DisplayName = "备注")]
[ImporterHeader(Name = "备注")]
public string? Remark { get; set; }
/// <summary>
/// 表名
/// </summary>
[ExporterHeader(IsIgnore =true)]
[ExporterHeader(DisplayName = "表名")]
[ImporterHeader(Name = "表名")]
public string? TableName { get; set; }
/// <summary>
/// 任务名称
@ -64,12 +69,14 @@ namespace TaskManager.Entity
/// <summary>
/// 全路径
/// </summary>
[ExporterHeader(DisplayName = "全路径")]
[ExporterHeader(DisplayName = "调用全路径")]
[ImporterHeader(Name = "调用全路径")]
public string? Url { get; set; }
/// <summary>
/// 是否自动执行
/// </summary>
[ExporterHeader(DisplayName = "是否自动执行")]
[ImporterHeader(Name = "是否自动执行")]
public bool IsAuto { get; set; }
public TaskConifgure()
{ }
@ -77,39 +84,42 @@ namespace TaskManager.Entity
}
public class TEA_SUBSCRIBE
public class TaskAllocation:BaseEntity
{
[Key]
[Required]
public Guid GUID { get; set; }
/// <summary>
/// 订阅任务名
/// </summary>
[MaxLength(50)]
public string TableName { get; set; }
[ExporterHeader(DisplayName = "订阅任务名")]
[ImporterHeader(Name = "订阅任务名")]
public string TaskName { get; set; } = "";
[ExporterHeader(DisplayName = "订阅表名")]
[ImporterHeader(Name = "订阅表名")]
[MaxLength(50)]
public string Creator { get; set; }
/// <summary>
/// 订阅表名
/// </summary>
[MaxLength(50)]
public string Subscriber { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int UID { get; set; }
public string TableName { get; set; }
/// <summary>
/// 创建系统
/// </summary>
[ExporterHeader(DisplayName = "创建系统")]
[ImporterHeader(Name = "创建系统")]
[MaxLength(50)]
public string CreateUser { get; set; }
[Required]
public DateTime CreateTime { get; set; }
public string Remark { get; set; }
public string Creator { get; set; }
/// <summary>
/// 订阅客户
/// </summary>
[ExporterHeader(DisplayName = "订阅客户")]
[ImporterHeader(Name = "订阅客户")]
[MaxLength(50)]
public string UpdateUser { get; set; }
public string Subscriber { get; set; }
public DateTime? UpdateTime { get; set; }
[Required]
public bool Enable { get; set; }
}
@ -162,18 +172,25 @@ namespace TaskManager.Entity
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[ExporterHeader(IsIgnore=true)]
[ImporterHeader(IsIgnore = true)]
public long UId { get; set; }
/// <summary>
/// 写状态
/// </summary>
[ExporterHeader(IsIgnore = true)]
[ImporterHeader(IsIgnore = true)]
public bool WriteState { get; set; }
[ExporterHeader(IsIgnore = true)]
[ImporterHeader(IsIgnore = true)]
public bool ReadState { get; set; }
[ExporterHeader(IsIgnore = true)]
[ImporterHeader(IsIgnore = true)]
public DateTime CreationTime { get; set; }
[ExporterHeader(IsIgnore = true)]
[ImporterHeader(IsIgnore = true)]
public string? Remark { get; set; }
[ExporterHeader(IsIgnore = true)]
[ImporterHeader(IsIgnore = true)]
public Guid TaskId { get; set; }

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

@ -1,16 +1,17 @@
using Azure.Core;
using System.Data;
using System.Drawing.Printing;
using System.Linq.Expressions;
using System.Text;
using System.Text.Json;
using System.Text.Json.Serialization;
using Azure.Core;
using Dapper;
using Magicodes.ExporterAndImporter.Core.Extension;
using Magicodes.ExporterAndImporter.Excel;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using System.Data;
using System.Drawing.Printing;
using System.Linq.Expressions;
using System.Text;
using System.Text.Json;
using System.Text.Json.Serialization;
using TaskManager.Contracts.Dtos;
using TaskManager.Entity;
using TaskManager.EntityFramework;
@ -312,6 +313,65 @@ namespace TaskManager.Controllers
return StatusCode(500, "生成导入模板时发生错误");
}
}
[HttpPost("Import")]
public async virtual Task<IActionResult> Import(IFormFile file)
{
if (file == null || file.Length <= 0)
{
return BadRequest("No file uploaded.");
}
try
{
var excelImporter = HttpContext.RequestServices.GetRequiredService<IExcelImporter>();
var importResult = await excelImporter.Import<T>(file.OpenReadStream());
//if (importResult.HasError)
//{
// return BadRequest(importResult.ErrorMessage);
//}
// 处理导入的数据
List<T> list = new List<T>();
foreach (var item in importResult.Data)
{
list.Add(item);
}
await ImportBefore(list);
await _jobDbContext.BulkInsertAsync(list);
await ImportAfter(list);
return new JsonResult(new { Code = 200, Message = "修改成功!" });
}
catch (Exception ex)
{
await _logger.AddError(ex.Message, TaskName);
return new JsonResult(new { Code = 400, Message = "导入失败!" });
}
}
/// <summary>
/// 重写插入前进行操作,如校验等
/// </summary>
/// <param name="p_list"></param>
/// <returns></returns>
protected virtual async Task ImportBefore(List<T> p_list)
{
}
/// <summary>
/// 重写插入后进行操作如
/// </summary>
/// <param name="p_list"></param>
/// <returns></returns>
protected virtual async Task ImportAfter(List<T> p_list)
{
}

157
API/Wood.Service/Controllers/CheryRecurringJobOutPageController.cs

@ -1,19 +1,22 @@
using Magicodes.ExporterAndImporter.Core.Extension;
using System.Data;
using System.Linq.Expressions;
using System.Text.Json;
using System.Text.Json.Serialization;
using Magicodes.ExporterAndImporter.Core.Extension;
using Magicodes.ExporterAndImporter.Excel;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Omu.ValueInjecter;
using System.Data;
using System.Linq.Expressions;
using System.Text.Json;
using System.Text.Json.Serialization;
using TaskManager.Contracts.Dtos;
using TaskManager.Controllers;
using TaskManager.Entity;
using TaskManager.EntityFramework;
using TaskManager.EntityFramework.Repository;
namespace TaskManager.Controllers
@ -23,7 +26,7 @@ namespace TaskManager.Controllers
public class CheryRecurringJobOutPageController<T, ToutputDetial> : RecurringJobBaseController where T : CherryReadBaseEntity, new() where ToutputDetial : CherryReadBaseEntityDto
{
protected readonly IRepository<T> _repository;
public CheryRecurringJobOutPageController(HttpClient httpClient, JobDbContext jobDbContext, LogController log,IRepository<T> repository) : base(httpClient, jobDbContext, log)
public CheryRecurringJobOutPageController(HttpClient httpClient, JobDbContext jobDbContext, LogController log, IRepository<T> repository) : base(httpClient, jobDbContext, log)
{
_repository = repository;
}
@ -42,12 +45,23 @@ namespace TaskManager.Controllers
var readedcount = _jobDbContext.Set<T>().Where(p => p.RequestDate == inputdate).Count();
if (readedcount == 0)//第一次请求用false,接口人胡启名要求
{
PagedResponse<ToutputDetial> firstResponse = await GetPageAsync(new PAGE_DTO() { Date = date, IsForce = false });
PagedResponse<ToutputDetial> firstResponse = await GetPageAsync(new PAGE_DTO() { Date = date, IsForce = false});
if (firstResponse == null || firstResponse.Code != 200)
{
await _logger.AddError("首次请求失败,无法获取分页信息。", TaskName);
return allData;
}
if (firstResponse.Data.Total == "0")
{
await _logger.AddError("首次请求失败,Total为0是否已经全部读取过。", TaskName);
return allData;
}
if (readedcount != int.Parse(firstResponse.Data.Total))//记录数不相等
{
var ids = _jobDbContext.Set<T>().Where(p => p.RequestDate == inputdate).Select(p => p.Id).ToList();//已经同步的ID
@ -68,6 +82,7 @@ namespace TaskManager.Controllers
}
else
{
foreach (var itm in firstResponse.Data.Rows)
{
T entity = new T();
@ -77,20 +92,25 @@ namespace TaskManager.Controllers
allData.Add(itm);
}
}
_jobDbContext.BulkInsert(pagefirstList);
//Console.WriteLine($"总记录数: {totalItems}, 每页大小: {pageSize}");
// 计算总页数
int totalPages = (int)Math.Ceiling((double)totalItems / pageSize);
//Console.WriteLine($"总共需要请求 {totalPages} 页数据");
// 循环请求剩余页面
for (currentPage = 2; currentPage <= totalPages; currentPage++)
{
PAGE_DTO pageinput = new PAGE_DTO() { Date = date, PageNum = currentPage, IsForce =false };
PAGE_DTO pageinput = new PAGE_DTO() { Date = date, PageNum = currentPage, IsForce = false };
Console.WriteLine($"正在请求第 {currentPage} 页...");
PagedResponse<ToutputDetial> pageResponse = await GetPageAsync(pageinput);
if (pageResponse?.Data.Rows != null && pageResponse.Data.Rows.Count > 0)
{
List<T> pageList = new List<T>();
if (readedcount > 0)
{
var listrows = pageResponse.Data.Rows.Where(p => !ids.Contains(p.Id));
@ -105,6 +125,7 @@ namespace TaskManager.Controllers
}
else
{
foreach (var itm in pageResponse.Data.Rows)
{
T entity = new T();
@ -114,16 +135,24 @@ namespace TaskManager.Controllers
allData.Add(itm);
}
}
_jobDbContext.BulkInsert(pageList);
await _logger.AddInfo($"成功获取 {pageResponse.Data.Rows.Count} 条记录", TaskName);
}
else
{
await _logger.AddError($"第 {currentPage} 页未返回数据", TaskName);
}
// 简单的请求间隔,避免过于频繁
await Task.Delay(200);
}
await _logger.AddInfo($"所有数据获取完成,总共获取了 {allData.Count} 条记录", TaskName);
}
@ -281,7 +310,7 @@ namespace TaskManager.Controllers
TaskName = taskName;
await FetchAllDataAsync(inputdate);
}
protected override async Task DoExecutingAsync(string url, string path, string takName,string client)
protected override async Task DoExecutingAsync(string url, string path, string takName, string client)
{
Url = url;
Path = path;
@ -290,12 +319,20 @@ namespace TaskManager.Controllers
await FetchAllDataAsync(string.Empty);
}
/// <summary>
/// 获取所有记录
/// </summary>
/// <returns></returns>
[HttpGet]
public async Task<ActionResult<IEnumerable<T>>> GetAll()
{
return await _repository.GetAllAsync() as List<T>;
}
/// <summary>
/// 获取实体通过ID
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet("{id}")]
public async Task<ActionResult<T>> GetById(int id)
{
@ -307,15 +344,19 @@ namespace TaskManager.Controllers
[HttpPost]
public async Task<ActionResult<T>> Create(T entity)
{
entity.CreationTime=DateTime.Now;
entity.CreationTime = DateTime.Now;
var createdEntity = await _repository.AddAsync(entity);
return CreatedAtAction(nameof(GetById), new { id = createdEntity.Id }, createdEntity);
}
/// <summary>
/// 修改
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
[HttpPut("{id}")]
public async Task<IActionResult> Update(T entity)
{
var _first=await _repository.GetByIdAsync(entity.UId);
var _first = await _repository.GetByIdAsync(entity.UId);
if (_first == null)
{
return new JsonResult(new { Code = 400, Message = "修改失败!" });
@ -325,6 +366,11 @@ namespace TaskManager.Controllers
await _repository.UpdateAsync(entity);
return new JsonResult(new { Code = 200, Message = "修改成功!" });
}
/// <summary>
/// 删除
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpDelete("{id}")]
public async Task<IActionResult> Delete(int id)
@ -332,6 +378,15 @@ namespace TaskManager.Controllers
await _repository.DeleteAsync(id);
return new JsonResult(new { Code = 200, Message = "删除成功!" }); ;
}
/// <summary>
/// 分页
/// </summary>
/// <param name="pageNumber">第几页</param>
/// <param name="pageSize">每页条数</param>
/// <param name="sortBy">排序字段</param>
/// <param name="isAscending">正序还是倒序</param>
/// <param name="filters">过滤条件</param>
/// <returns></returns>
[HttpGet]
public async Task<ActionResult<PagedResult<T>>> GetPaged(
[FromQuery] int pageNumber = 1,
@ -356,7 +411,15 @@ namespace TaskManager.Controllers
return Ok(pagedResult);
}
/// <summary>
/// 导出
/// </summary>
/// <param name="pageNumber"></param>
/// <param name="pageSize">每页条数</param>
/// <param name="sortBy">排序字段</param>
/// <param name="isAscending">正序还是倒序</param>
/// <param name="filters">过滤条件</param>
/// <returns></returns>
[HttpGet]
public async Task<FileStreamResult> Export([FromQuery] int pageNumber = 1,
@ -390,7 +453,10 @@ namespace TaskManager.Controllers
}
/// <summary>
/// 获取导入模板
/// </summary>
/// <returns></returns>
[HttpGet]
@ -431,9 +497,62 @@ namespace TaskManager.Controllers
return StatusCode(500, "生成导入模板时发生错误");
}
}
/// <summary>
/// 导入
/// </summary>
/// <param name="file">选择文件</param>
/// <returns></returns>
[HttpPost("Import")]
public async virtual Task<IActionResult> Import(IFormFile file)
{
if (file == null || file.Length <= 0)
{
return BadRequest("No file uploaded.");
}
try
{
var excelImporter = HttpContext.RequestServices.GetRequiredService<IExcelImporter>();
var importResult = await excelImporter.Import<T>(file.OpenReadStream());
//if (importResult.HasError)
//{
// return BadRequest(importResult.ErrorMessage);
//}
// 处理导入的数据
List<T> list = new List<T>();
foreach (var item in importResult.Data)
{
list.Add(item);
}
await ImportBefore(list);
await _jobDbContext.BulkInsertAsync(list);
await ImportAfter(list);
return new JsonResult(new { Code = 200, Message = "修改成功!" });
}
catch (Exception ex)
{
await _logger.AddError(ex.Message, TaskName);
return new JsonResult(new { Code = 400, Message = "导入失败!" });
}
}
protected virtual async Task ImportBefore(List<T> p_list)
{
}
protected virtual async Task ImportAfter(List<T> p_list)
{
}
@ -457,4 +576,8 @@ namespace TaskManager.Controllers
writer.WriteStringValue(value.ToString(_format));
}
}
}

100
API/Wood.Service/Controllers/NormalBaseController.cs

@ -1,10 +1,4 @@
using Magicodes.ExporterAndImporter.Core;
using Magicodes.ExporterAndImporter.Excel;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
@ -12,11 +6,18 @@ using System.Linq.Expressions;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using Magicodes.ExporterAndImporter.Core;
using Magicodes.ExporterAndImporter.Core.Extension;
using Magicodes.ExporterAndImporter.Excel;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using TaskManager.Entity;
using TaskManager.EntityFramework;
using TaskManager.EntityFramework.Repository;
using Wood.Util;
using Magicodes.ExporterAndImporter.Core.Extension;
namespace Wood.Service.Controllers
@ -31,6 +32,7 @@ namespace Wood.Service.Controllers
protected readonly IRepository<T> _repository;
public NormalBaseController(JobDbContext context, IServiceProvider builder, IConfiguration configuration, IRepository<T> repository)
{
_builder = builder;
@ -96,6 +98,17 @@ namespace Wood.Service.Controllers
}
/// <summary>
/// 分页
/// </summary>
/// <param name="pageNumber"></param>
/// <param name="pageSize"></param>
/// <param name="sortBy"></param>
/// <param name="isAscending"></param>
/// <param name="filters"></param>
/// <returns></returns>
[HttpGet]
public async Task<ActionResult<TaskManager.EntityFramework.Repository.PagedResult<T>>> GetPaged(
[FromQuery] int pageNumber = 1,
@ -120,7 +133,15 @@ namespace Wood.Service.Controllers
return Ok(pagedResult);
}
/// <summary>
/// 导出
/// </summary>
/// <param name="pageNumber"></param>
/// <param name="pageSize"></param>
/// <param name="sortBy"></param>
/// <param name="isAscending"></param>
/// <param name="filters"></param>
/// <returns></returns>
[HttpGet]
public async Task<FileStreamResult> Export([FromQuery] int pageNumber = 1,
@ -157,7 +178,10 @@ namespace Wood.Service.Controllers
}
/// <summary>
/// 导入模板
/// </summary>
/// <returns></returns>
[HttpGet]
@ -198,6 +222,62 @@ namespace Wood.Service.Controllers
return StatusCode(500, "生成导入模板时发生错误");
}
}
/// <summary>
/// 导入
/// </summary>
/// <param name="file"></param>
/// <returns></returns>
[HttpPost("Import")]
public async virtual Task<IActionResult> Import(IFormFile file)
{
if (file == null || file.Length <= 0)
{
return BadRequest("No file uploaded.");
}
try
{
var excelImporter = HttpContext.RequestServices.GetRequiredService<IExcelImporter>();
var importResult = await excelImporter.Import<T>(file.OpenReadStream());
//if (importResult.HasError)
//{
// return BadRequest(importResult.ErrorMessage);
//}
// 处理导入的数据
List<T> list = new List<T>();
foreach (var item in importResult.Data)
{
list.Add(item);
}
await ImportBefore(list);
await _context.BulkInsertAsync(list);
await ImportAfter(list);
return new JsonResult(new { Code = 200, Message = "修改成功!" });
}
catch (Exception ex)
{
// await _logger.AddError(ex.Message, TaskName);
return new JsonResult(new { Code = 400, Message = "导入失败!" });
}
}
protected virtual async Task ImportBefore(List<T> p_list)
{
}
protected virtual async Task ImportAfter(List<T> p_list)
{
}

18
API/Wood.Service/Controllers/TaskAllocationService.cs

@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using TaskManager.Entity;
using TaskManager.EntityFramework;
namespace Wood.Service.Controllers
{
public class TaskAllocationService : NormalBaseController<TaskAllocation>
{
public TaskAllocationService(JobDbContext context, IServiceProvider builder, IConfiguration configuration, IRepository<TaskAllocation> repository) : base(context, builder, configuration, repository)
{
}
}
}

18
API/Wood.Service/Controllers/TaskSubService.cs

@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using TaskManager.Entity;
using TaskManager.EntityFramework;
namespace Wood.Service.Controllers
{
public class TaskSubService : NormalBaseController<TaskSub>
{
public TaskSubService(JobDbContext context, IServiceProvider builder, IConfiguration configuration, IRepository<TaskSub> repository) : base(context, builder, configuration, repository)
{
}
}
}

2
API/Wood.Service/Datas/SupplierEmployeeDtService.cs

@ -27,7 +27,7 @@ namespace Wood.Service.Datas
[HttpPost]
[Route("import")]
public async Task<IActionResult> Import(IFormFile file)
public override async Task<IActionResult> Import(IFormFile file)
{
if (file == null || file.Length == 0)
{

2
API/Wood.Service/Datas/SupplierInfoDtService.cs

@ -27,7 +27,7 @@ namespace Wood.Service.Datas
[HttpPost]
[Route("import")]
public async Task<IActionResult> Import(IFormFile file)
public override async Task<IActionResult> Import(IFormFile file)
{
if (file == null || file.Length == 0)
{

2
API/Wood.Service/Datas/SupplierProAttachmentDataDtService.cs

@ -28,7 +28,7 @@ namespace Wood.Service.Datas
[HttpPost]
[Route("import")]
public async Task<IActionResult> Import(IFormFile file)
public override async Task<IActionResult> Import(IFormFile file)
{
if (file == null || file.Length == 0)
{

2
API/Wood.Service/Datas/SupplierProProcessEquipmentDtService.cs

@ -28,7 +28,7 @@ namespace Wood.Service.Datas
[HttpPost]
[Route("import")]
public async Task<IActionResult> Import(IFormFile file)
public override async Task<IActionResult> Import(IFormFile file)
{
if (file == null || file.Length == 0)
{

Loading…
Cancel
Save