OA用印自动同步,完善确认书来源标识
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user