Files
zszq-trs/YLErpWeb/WebAPI/Controllers/TradeOAJobController.cs

93 lines
3.3 KiB
C#

using System.Text.Json;
using YLErp.Helpers;
using YLErp.Modules.TradeModule;
namespace YLErp.Web.WebAPI.Controllers
{
/// <summary>
/// OA用印状态同步定时任务接口(无鉴权,供PowerJob等外部调度系统调用)
/// </summary>
[ApiController]
public class TradeOAJobController : ControllerBase
{
private static readonly IYcLogger logger = LogFactory.GetLogger<TradeOAJobController>();
/// <summary>
/// 同步OA用印状态
/// </summary>
/// <remarks>
/// 无需鉴权,建议通过内网限制或Nginx限制来源IP。
/// 可选:在请求Header中携带 X-Job-Api-Key 进行简单校验。
/// </remarks>
[HttpPost]
[Route("api/job/tradeContract/syncOAStampStatus")]
public JsonResult SyncOAStampStatus()
{
try
{
// 可选:简单 API Key 校验
var configKey = AppManager.GetConfiguration()["JobConfig:ApiKey"];
if (!string.IsNullOrEmpty(configKey))
{
var requestKey = Request.Headers["X-Job-Api-Key"].FirstOrDefault();
if (configKey != requestKey)
{
return JsonError(401, "Invalid API Key");
}
}
logger.Info("开始执行OA用印状态同步任务");
// 使用系统用户身份执行
var systemUser = new OptUserInfo(0, "系统用印同步", OptUserFrom.System);
var service = new TradeOAService(systemUser);
var results = service.SyncOAStampStatus();
var successCount = results.Count(r => r.Success);
var failCount = results.Count(r => !r.Success);
logger.Info($"OA用印状态同步任务完成,共处理 {results.Count} 条,成功 {successCount} 条,失败 {failCount} 条");
return JsonSuccess(new
{
total = results.Count,
successCount,
failCount,
executeTime = DateTime.Now,
details = results.Select(r => new { r.TradeId, r.Success, r.Message }).ToList()
});
}
catch (Exception ex)
{
logger.Error($"OA用印状态同步任务异常: {ex.Message}", ex);
return JsonError($"同步OA用印状态失败: {ex.Message}");
}
}
#region JSON消息处理
private static readonly JsonSerializerOptions _jsonOptions = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
};
private JsonResult JsonSuccess(object data, string msg = null)
{
return new JsonResult(new ApiResult { code = 0, msg = msg, data = data }, _jsonOptions);
}
private JsonResult JsonError(string msg)
{
return new JsonResult(new ApiResult { code = 1, msg = msg, data = null }, _jsonOptions);
}
private JsonResult JsonError(int code, string msg)
{
return new JsonResult(new ApiResult { code = code, msg = msg, data = null }, _jsonOptions);
}
#endregion
}
}