93 lines
3.3 KiB
C#
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
|
|
}
|
|
}
|