feat 照片上传sap
This commit is contained in:
@@ -22,13 +22,4 @@ public interface IDevicePermissionApi
|
||||
/// <returns></returns>
|
||||
[Post("/api/devicepermissions/re-permission")]
|
||||
Task<DefaultApiResult<int>> RePermissionUsersInfoAsync(PermissionUsersInfoDto beforeDto);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 任务生成
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
[Post("/api/devicepermissions/assignment-generate")]
|
||||
Task<DefaultApiResult> GeneratePermissionsAsync(GeneratePermissionIdRequest request);
|
||||
}
|
||||
@@ -4,6 +4,8 @@ using Dlhis.Basic.Organization.Response;
|
||||
using Dlhis.Entity.Basic.Entity;
|
||||
using Dlhis.Entity.Basic.Enums;
|
||||
using Dlhis.Entity.Device.Enums;
|
||||
using Dlhis.Scheduled.Api;
|
||||
using Dlhis.Scheduled.Api.Request;
|
||||
using Kurisu.AspNetCore.Authentication.Abstractions;
|
||||
using Kurisu.AspNetCore.CustomClass;
|
||||
using Kurisu.AspNetCore.DataAccess.Extensions;
|
||||
@@ -22,6 +24,7 @@ public class GainfoFaceService : IGainfoFaceService
|
||||
private readonly ILogger<GainfoFaceService> _logger;
|
||||
private readonly IConfiguration _configuration;
|
||||
private readonly ICurrentUser _currentUser;
|
||||
private readonly IHangfireApi _hangfireApi;
|
||||
private readonly IDevicePermissionService _devicePermissionService;
|
||||
private readonly IDataProtectionProvider _dataProtectionProvider;
|
||||
|
||||
@@ -30,6 +33,7 @@ public class GainfoFaceService : IGainfoFaceService
|
||||
ILogger<GainfoFaceService> logger,
|
||||
IConfiguration configuration,
|
||||
ICurrentUser currentUser,
|
||||
IHangfireApi hangfireApi,
|
||||
IDevicePermissionService devicePermissionService,
|
||||
IDataProtectionProvider dataProtectionProvider)
|
||||
{
|
||||
@@ -39,6 +43,7 @@ public class GainfoFaceService : IGainfoFaceService
|
||||
_logger = logger;
|
||||
_configuration = configuration;
|
||||
_currentUser = currentUser;
|
||||
_hangfireApi = hangfireApi;
|
||||
_devicePermissionService = devicePermissionService;
|
||||
_dataProtectionProvider = dataProtectionProvider;
|
||||
}
|
||||
@@ -216,9 +221,21 @@ public class GainfoFaceService : IGainfoFaceService
|
||||
await _faceDbContext.UpdateAsync(face);
|
||||
}
|
||||
|
||||
var prefix = gainfo.Factory == "501" ? "jschuneng" : "jingke";
|
||||
var url = $"https://pay.aizhuhotel.com/{prefix}/api/face";
|
||||
try
|
||||
{
|
||||
await _hangfireApi.SyncFaceToSapAsync(new FaceUploadToSapRequest
|
||||
{
|
||||
UserCode = face.UserCode,
|
||||
Base64 = face.Face
|
||||
});
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_logger.LogError(e, "上传face数据到sap失败:{message}", e.Message);
|
||||
}
|
||||
|
||||
// var prefix = gainfo.Factory == "501" ? "jschuneng" : "jingke";
|
||||
// var url = $"https://pay.aizhuhotel.com/{prefix}/api/face";
|
||||
|
||||
//生成任务
|
||||
await _devicePermissionService.GenerateDeviceTasksAsync(gainfo.No, taskType);
|
||||
|
||||
14
Src/Dlhis.Entity/Sap/SapDataSyncEntity.cs
Normal file
14
Src/Dlhis.Entity/Sap/SapDataSyncEntity.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
using Kurisu.AspNetCore.DataAccess.SqlSugar;
|
||||
using SqlSugar;
|
||||
|
||||
namespace Dlhis.Entity.Sap;
|
||||
|
||||
[SugarTable(TableName = "SapDataSync")]
|
||||
public class SapDataSyncEntity : SugarBaseEntity
|
||||
{
|
||||
public string Key { get; set; }
|
||||
|
||||
public string Type { get; set; }
|
||||
|
||||
public bool IsSync { get; set; }
|
||||
}
|
||||
@@ -16,7 +16,8 @@ public interface IHangfireApi
|
||||
[Post("api/hangfire/sap/person/no")]
|
||||
Task<DefaultApiResult> SyncSapPersonAsync(SapNoRequest request);
|
||||
|
||||
[Auth]
|
||||
[Post("api/hangfire/assignment-generate")]
|
||||
Task<DefaultApiResult> GeneratePermissionsAsync(GeneratePermissionIdRequest request);
|
||||
|
||||
|
||||
[Post("api/hangfire/sap/face")]
|
||||
Task<DefaultApiResult> SyncFaceToSapAsync(FaceUploadToSapRequest request);
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
namespace Dlhis.Scheduled.Api.Request;
|
||||
|
||||
public class FaceUploadToSapRequest
|
||||
{
|
||||
public string UserCode { get; set; }
|
||||
public string Base64 { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
namespace Dlhis.ScheduledTask.Common.Response;
|
||||
|
||||
public class SapFaceSyncResponse
|
||||
{
|
||||
/// <summary>
|
||||
/// S 成功
|
||||
/// </summary>
|
||||
public string OLX { get; set; }
|
||||
|
||||
public string OMS { get; set; }
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
using Dlhis.Basic.Api.Request;
|
||||
using Dlhis.ScheduledTask.Common.Request;
|
||||
using Dlhis.ScheduledTask.TaskAssignment.Request;
|
||||
|
||||
namespace Dlhis.ScheduledTask.Common.Services;
|
||||
|
||||
@@ -23,5 +24,5 @@ public interface IHangfireService : IScopeDependency
|
||||
Task CreateSapWerkSyncBackgroundJobAsync(SapNoRequest request);
|
||||
|
||||
|
||||
void GeneratePermissions(GeneratePermissionIdRequest request);
|
||||
Task FaceUploadToSapAsync(FaceUploadToSapRequest request);
|
||||
}
|
||||
@@ -19,8 +19,18 @@ public interface IJinkoJIPService : ISingletonDependency
|
||||
/// <returns></returns>
|
||||
Task<SapBusinessTripInfoResponse> GetTravelInfosByDepartmentsAsync(DateTime begin, DateTime end, List<string> departmentNos);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取出差信息
|
||||
/// </summary>
|
||||
/// <param name="begin"></param>
|
||||
/// <param name="end"></param>
|
||||
/// <param name="userCode"></param>
|
||||
/// <returns></returns>
|
||||
Task<SapBusinessTripInfoResponse> GetTravelInfosByUserCodeAsync(DateTime begin, DateTime end, string userCode);
|
||||
|
||||
|
||||
Task<SapFaceSyncResponse> SyncFaceToSapAsync(string userCode, string base64);
|
||||
|
||||
|
||||
string IssueToken();
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
using Dlhis.Basic.Api;
|
||||
using Dlhis.Basic.Api.Request;
|
||||
using Dlhis.Entity.Basic.Entity;
|
||||
using Dlhis.Entity.Basic.Entity;
|
||||
using Dlhis.ScheduledTask.Common.Request;
|
||||
using Dlhis.ScheduledTask.TaskAssignment.Request;
|
||||
using Hangfire;
|
||||
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
|
||||
using Kurisu.AspNetCore.Utils;
|
||||
@@ -13,11 +12,13 @@ public class HangfireService : IHangfireService
|
||||
{
|
||||
private readonly RedisCache _redisCache;
|
||||
private readonly IDbContext _dbContext;
|
||||
private readonly IJinkoJIPService _jinkoJipService;
|
||||
|
||||
public HangfireService(RedisCache redisCache, IDbContext dbContext)
|
||||
public HangfireService(RedisCache redisCache, IDbContext dbContext, IJinkoJIPService jinkoJipService)
|
||||
{
|
||||
_redisCache = redisCache;
|
||||
_dbContext = dbContext;
|
||||
_jinkoJipService = jinkoJipService;
|
||||
}
|
||||
|
||||
public async Task CreateSapPersonSyncBackgroundJobAsync(SapNoRequest request)
|
||||
@@ -47,9 +48,8 @@ public class HangfireService : IHangfireService
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public void GeneratePermissions(GeneratePermissionIdRequest request)
|
||||
public async Task FaceUploadToSapAsync(FaceUploadToSapRequest request)
|
||||
{
|
||||
BackgroundJob.Enqueue<IDevicePermissionApi>(x => x.GeneratePermissionsAsync(request));
|
||||
await _jinkoJipService.SyncFaceToSapAsync(request.UserCode, request.Base64);
|
||||
}
|
||||
}
|
||||
@@ -158,6 +158,25 @@ public class JinkoJIPService : IJinkoJIPService
|
||||
return jsonResponse.ToObject<SapBusinessTripInfoResponse>();
|
||||
}
|
||||
|
||||
public async Task<SapFaceSyncResponse> SyncFaceToSapAsync(string userCode, string base64)
|
||||
{
|
||||
const string apiUrl = "/JIP/HCM/HCM_I_PHOTO";
|
||||
var obj = new
|
||||
{
|
||||
I_WORKCODE = userCode,
|
||||
I_PHOTO_STR = base64
|
||||
};
|
||||
|
||||
var body = obj.ToJson();
|
||||
|
||||
var content = new StringContent(body, Encoding.UTF8, "application/json");
|
||||
var response = await GetHttpClient().PostAsync(apiUrl, content);
|
||||
response.EnsureSuccessStatusCode();
|
||||
|
||||
var jsonResponse = await response.Content.ReadAsStringAsync();
|
||||
return jsonResponse.ToObject<SapFaceSyncResponse>();
|
||||
}
|
||||
|
||||
|
||||
public string IssueToken()
|
||||
{
|
||||
|
||||
51
Src/Dlhis.ScheduledTask/Jobs/SyncFaceJob.cs
Normal file
51
Src/Dlhis.ScheduledTask/Jobs/SyncFaceJob.cs
Normal file
@@ -0,0 +1,51 @@
|
||||
using Dlhis.Entity.Basic.Entity;
|
||||
using Dlhis.Entity.Sap;
|
||||
using Dlhis.ScheduledTask.Attributes;
|
||||
using Dlhis.ScheduledTask.Common.Services;
|
||||
|
||||
namespace Dlhis.ScheduledTask.Jobs;
|
||||
|
||||
[RecurringJob(nameof(SyncFaceJob), "0 0/15 * * * ?", Name = "face数据同步sap")]
|
||||
public class SyncFaceJob : BaseJob
|
||||
{
|
||||
private readonly IJinkoJIPService _jinkoJipService;
|
||||
|
||||
/// <inheritdoc />
|
||||
public SyncFaceJob(IServiceProvider serviceProvider, IJinkoJIPService jinkoJipService) : base(serviceProvider)
|
||||
{
|
||||
_jinkoJipService = jinkoJipService;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override async Task RunAsync(IServiceProvider serviceProvider)
|
||||
{
|
||||
var faceDbContext = DbContext.ChangeDb("face");
|
||||
|
||||
var existsData = await DbContext.Queryable<SapDataSyncEntity>().Where(x => x.IsSync).Select(x => x.Key).ToListAsync();
|
||||
|
||||
var userFaces = await faceDbContext.Queryable<GainfoFaceEntity>()
|
||||
.Where(x => !existsData.Contains(x.UserCode))
|
||||
.ToPageListAsync(1, 5000);
|
||||
|
||||
foreach (var data in userFaces)
|
||||
{
|
||||
try
|
||||
{
|
||||
var response = await _jinkoJipService.SyncFaceToSapAsync(data.UserCode, data.Face);
|
||||
if (response.OLX == "S")
|
||||
{
|
||||
await DbContext.InsertAsync(new SapDataSyncEntity
|
||||
{
|
||||
Key = data.UserCode,
|
||||
Type = "Face",
|
||||
IsSync = true
|
||||
});
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Logger.LogError(e, "上传face数据失败:{message}", e.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,14 +1,9 @@
|
||||
using Dlhis.Basic.Api.Request;
|
||||
using Dlhis.Entity.Basic.Entity;
|
||||
using Dlhis.Entity.Canteen.Entities;
|
||||
using Dlhis.Entity.Canteen.Enums;
|
||||
using Dlhis.ScheduledTask.Common.Request;
|
||||
using Dlhis.ScheduledTask.Common.Request;
|
||||
using Dlhis.ScheduledTask.Common.Services;
|
||||
using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop;
|
||||
using Dlhis.ScheduledTask.TaskAssignment.Request;
|
||||
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using SqlSugar;
|
||||
|
||||
namespace Dlhis.ScheduledTask.TaskAssignment.Controllers;
|
||||
|
||||
@@ -52,61 +47,10 @@ public class HangfireController : ControllerBase
|
||||
await _hangfireService.CreateSapWerkSyncBackgroundJobAsync(request);
|
||||
}
|
||||
|
||||
|
||||
[HttpPost("assignment-generate")]
|
||||
public void GeneratePermissionsAsync(GeneratePermissionIdRequest request)
|
||||
[AllowAnonymous]
|
||||
[HttpPost("sap/face")]
|
||||
public async Task FaceUploadToSapAsync(FaceUploadToSapRequest request)
|
||||
{
|
||||
_hangfireService.GeneratePermissions(request);
|
||||
}
|
||||
|
||||
|
||||
[IgnoreTenant]
|
||||
[HttpPost("recalc")]
|
||||
public async Task ReCalc()
|
||||
{
|
||||
// select UserCode,Remark, count(1) count from balancerecord
|
||||
// where Status = 'Valid'
|
||||
// and TenantId !='1201'
|
||||
// and IsDeleted = false
|
||||
// group by UserCode,Remark
|
||||
// having ifnull(Remark,'')!='' and count > 1 and Remark !='用户取消' and Remark !='正常发放';
|
||||
|
||||
var ls = await _dbContext.Queryable<BalanceRecordEntity>().Where(x => x.Status == BalanceRecordStatusEnumType.Valid)
|
||||
.Select(x => new { x.UserCode, x.Remark, count = SqlFunc.AggregateCount(x.Id) })
|
||||
.GroupBy(x => new { x.UserCode, x.Remark })
|
||||
.Having(x => SqlFunc.IsNull(x.Remark, "") != "" && SqlFunc.AggregateCount(1) > 1 && x.Remark != "用户取消" && x.Remark != "正常发放")
|
||||
.ToListAsync();
|
||||
|
||||
foreach (var row in ls)
|
||||
{
|
||||
var data = await _dbContext.Queryable<BalanceRecordEntity>()
|
||||
.Where(x => x.UserCode == row.UserCode)
|
||||
.Where(x => x.ApplicationType == CanteenApplicationTypeEnumType.MealSupplement)
|
||||
.Where(x => x.Remark == row.Remark)
|
||||
.ToListAsync();
|
||||
|
||||
if (data.Count <= 1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var f = data.First();
|
||||
var others = data.Where(x => x.Id != f.Id).ToList();
|
||||
|
||||
others.ForEach(x => x.Status = BalanceRecordStatusEnumType.Obsolute);
|
||||
await _dbContext.UpdateAsync(others);
|
||||
|
||||
var sum = await _dbContext.Queryable<BalanceRecordEntity>().Where(x => x.UserCode == f.UserCode)
|
||||
.Where(x => x.Status == BalanceRecordStatusEnumType.Valid)
|
||||
.SumAsync(x => x.Amount);
|
||||
|
||||
var mealInfo = await _dbContext.Queryable<GainfoMealEntity>().Where(x => x.UserCode == f.UserCode).SingleAsync();
|
||||
await _dbContext.Updateable<GainfoMealEntity>()
|
||||
.SetColumns(x => x.Balance == sum)
|
||||
.SetColumns(x => x.Version == x.Version + 1)
|
||||
.SetColumns(x => x.ModifiedTime == DateTime.Now)
|
||||
.Where(x => x.UserCode == f.UserCode && x.Version == mealInfo.Version)
|
||||
.ExecuteCommandAsync();
|
||||
}
|
||||
await _hangfireService.FaceUploadToSapAsync(request);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
namespace Dlhis.ScheduledTask.TaskAssignment.Request;
|
||||
|
||||
public class FaceUploadToSapRequest
|
||||
{
|
||||
public string UserCode { get; set; }
|
||||
public string Base64 { get; set; }
|
||||
}
|
||||
Reference in New Issue
Block a user