fix 同步任务调整
This commit is contained in:
@@ -93,6 +93,11 @@ public class GainfoSapEntity
|
|||||||
public string guestno { get; set; }
|
public string guestno { get; set; }
|
||||||
public string ZZ_KLX { get; set; }
|
public string ZZ_KLX { get; set; }
|
||||||
public DateTime? DAT01 { get; set; }
|
public DateTime? DAT01 { get; set; }
|
||||||
|
|
||||||
|
public string ZZ_COUNNM { get; set; }
|
||||||
|
public string ZZ_GZDJDNM { get; set; }
|
||||||
|
public string ZZ_GZDCQNM { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
18
Src/Dlhis.Entity/Basic/Entity/WerkEntity.cs
Normal file
18
Src/Dlhis.Entity/Basic/Entity/WerkEntity.cs
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
using Kurisu.SqlSugar;
|
||||||
|
using SqlSugar;
|
||||||
|
|
||||||
|
namespace Dlhis.Entity.Basic.Entity;
|
||||||
|
|
||||||
|
[SugarTable(TableName = "Werk", TableDescription = "人事范围")]
|
||||||
|
public class WerkEntity : SugarBaseEntity
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 人事范围
|
||||||
|
/// </summary>
|
||||||
|
public string Werk { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 名称
|
||||||
|
/// </summary>
|
||||||
|
public string Name { get; set; }
|
||||||
|
}
|
||||||
@@ -33,7 +33,11 @@ public class SapPersonComparer : IEqualityComparer<SapPersonItem>
|
|||||||
&& x.MASSN == y.MASSN
|
&& x.MASSN == y.MASSN
|
||||||
&& x.MNTXT == y.MNTXT
|
&& x.MNTXT == y.MNTXT
|
||||||
&& (x.ZXUELI ?? string.Empty).Trim() == (y.ZXUELI ?? string.Empty).Trim()
|
&& (x.ZXUELI ?? string.Empty).Trim() == (y.ZXUELI ?? string.Empty).Trim()
|
||||||
&& (x.ZZ_KLX ?? string.Empty) == (y.ZZ_KLX ?? string.Empty);
|
&& (x.ZZ_KLX ?? string.Empty) == (y.ZZ_KLX ?? string.Empty)
|
||||||
|
&& x.ZZ_COUNNM == y.ZZ_COUNNM
|
||||||
|
&& x.ZZ_GZDJDNM == y.ZZ_GZDJDNM
|
||||||
|
&& x.ZZ_GZDCQNM == y.ZZ_GZDCQNM
|
||||||
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int GetHashCode(SapPersonItem obj)
|
public int GetHashCode(SapPersonItem obj)
|
||||||
@@ -57,7 +61,11 @@ public class SapPersonComparer : IEqualityComparer<SapPersonItem>
|
|||||||
^ obj.MASSN.SafeGetHashCode()
|
^ obj.MASSN.SafeGetHashCode()
|
||||||
^ obj.MNTXT.SafeGetHashCode()
|
^ obj.MNTXT.SafeGetHashCode()
|
||||||
^ obj.ZXUELI.SafeGetHashCode()
|
^ obj.ZXUELI.SafeGetHashCode()
|
||||||
^ (obj.ZZ_KLX ?? "").SafeGetHashCode();
|
^ (obj.ZZ_KLX ?? "").SafeGetHashCode()
|
||||||
|
^ obj.ZZ_COUNNM.SafeGetHashCode()
|
||||||
|
^ obj.ZZ_GZDJDNM.SafeGetHashCode()
|
||||||
|
^ obj.ZZ_GZDCQNM.SafeGetHashCode()
|
||||||
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,11 +2,8 @@
|
|||||||
|
|
||||||
namespace Dlhis.ScheduledTask.SyncSapInfo.Dto;
|
namespace Dlhis.ScheduledTask.SyncSapInfo.Dto;
|
||||||
|
|
||||||
public class SapPerson
|
public class SapPerson<T>
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
[JsonProperty("item")]
|
[JsonProperty("item")]
|
||||||
public List<SapPersonItem> Items { get; set; }
|
public List<T> Items { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
namespace Dlhis.ScheduledTask.SyncSapInfo.Dto
|
||||||
|
{
|
||||||
|
public class SapPersonDepartmentStatus
|
||||||
|
{
|
||||||
|
public string ZWORKCODE { get; set; }
|
||||||
|
|
||||||
|
public DateTime BEGDA { get; set; }
|
||||||
|
|
||||||
|
public DateTime ENDDA { get; set; }
|
||||||
|
|
||||||
|
public string WERKS { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 部门号
|
||||||
|
/// </summary>
|
||||||
|
public string ORGEH { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,6 +5,7 @@ public class SapPersonItem
|
|||||||
public string KOSTL { get; set; }
|
public string KOSTL { get; set; }
|
||||||
|
|
||||||
public string ZLZRQ { get; set; }
|
public string ZLZRQ { get; set; }
|
||||||
|
|
||||||
public string ZZ_SFZH { get; set; }
|
public string ZZ_SFZH { get; set; }
|
||||||
|
|
||||||
public string STELL { get; set; }
|
public string STELL { get; set; }
|
||||||
@@ -189,4 +190,19 @@ public class SapPersonItem
|
|||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string ZZ_ZPQD { get; set; }
|
public string ZZ_ZPQD { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 国家
|
||||||
|
/// </summary>
|
||||||
|
public string ZZ_COUNNM { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 基地
|
||||||
|
/// </summary>
|
||||||
|
public string ZZ_GZDJDNM { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 厂区
|
||||||
|
/// </summary>
|
||||||
|
public string ZZ_GZDCQNM { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
namespace Dlhis.ScheduledTask.SyncSapInfo.Dto
|
||||||
|
{
|
||||||
|
public class SapPersonJobStatus
|
||||||
|
{
|
||||||
|
public string ZWORKCODE { get; set; }
|
||||||
|
|
||||||
|
public DateTime BEGDA { get; set; }
|
||||||
|
|
||||||
|
public DateTime ENDDA { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 0离职
|
||||||
|
/// </summary>
|
||||||
|
public int STAT2 { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
using Dlhis.ScheduledTask.SyncSapInfo.Services;
|
||||||
|
|
||||||
|
namespace Dlhis.ScheduledTask.SyncSapInfo.Job;
|
||||||
|
|
||||||
|
public class SyncOriginCardInfoJob
|
||||||
|
{
|
||||||
|
private readonly IJinkoJIPService _jinkoJIPService;
|
||||||
|
|
||||||
|
public SyncOriginCardInfoJob(IJinkoJIPService jinkoJIPService)
|
||||||
|
{
|
||||||
|
_jinkoJIPService = jinkoJIPService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task RunAsync()
|
||||||
|
{
|
||||||
|
await _jinkoJIPService.UploadAttendancesAsync(new List<UploadAttendanceRequest>()
|
||||||
|
{
|
||||||
|
new UploadAttendanceRequest()
|
||||||
|
{
|
||||||
|
RaiseTime = DateTime.Now,
|
||||||
|
ZWORKCODE = "000001",
|
||||||
|
ZNOTE = "正门1"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,6 +7,9 @@ using Dlhis.ScheduledTask.SyncSapInfo.Comparers;
|
|||||||
using Dlhis.ScheduledTask.SyncSapInfo.Services;
|
using Dlhis.ScheduledTask.SyncSapInfo.Services;
|
||||||
using Kurisu.AspNetCore.Scope;
|
using Kurisu.AspNetCore.Scope;
|
||||||
using Dlhis.Entity.Basic.Enums;
|
using Dlhis.Entity.Basic.Enums;
|
||||||
|
using Dlhis.Sys.Api;
|
||||||
|
using Dlhis.Sys.Api.Response;
|
||||||
|
using SqlSugar;
|
||||||
|
|
||||||
namespace Dlhis.ScheduledTask.SyncSapInfo.Job;
|
namespace Dlhis.ScheduledTask.SyncSapInfo.Job;
|
||||||
|
|
||||||
@@ -14,12 +17,15 @@ public class SyncPersonJob
|
|||||||
{
|
{
|
||||||
private readonly ILogger _logger;
|
private readonly ILogger _logger;
|
||||||
private readonly IJinkoSapService _jinkoSapService;
|
private readonly IJinkoSapService _jinkoSapService;
|
||||||
|
private readonly ITenantApi _tenantApi;
|
||||||
private List<PositionEntity> _positions;
|
private List<PositionEntity> _positions;
|
||||||
|
private List<TenantResponse> _tenants;
|
||||||
|
|
||||||
public SyncPersonJob(ILogger<SyncPersonJob> logger, IJinkoSapService jinkoSapService)
|
public SyncPersonJob(ILogger<SyncPersonJob> logger, IJinkoSapService jinkoSapService, ITenantApi tenantApi)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_jinkoSapService = jinkoSapService;
|
_jinkoSapService = jinkoSapService;
|
||||||
|
_tenantApi = tenantApi;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task RunAsync()
|
public async Task RunAsync()
|
||||||
@@ -44,8 +50,11 @@ public class SyncPersonJob
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private int SavePerson(List<SapPersonItem> persons)
|
private async Task<int> SavePerson(List<SapPersonItem> persons)
|
||||||
{
|
{
|
||||||
|
var tenantResult = await _tenantApi.GetTenantsInternalAsync();
|
||||||
|
_tenants = tenantResult.Data;
|
||||||
|
|
||||||
var failure = 0;
|
var failure = 0;
|
||||||
var workCodes = persons.Select(x => x.ZWORKCODE).ToList();
|
var workCodes = persons.Select(x => x.ZWORKCODE).ToList();
|
||||||
var chunks = workCodes.Chunk(4000).ToList();
|
var chunks = workCodes.Chunk(4000).ToList();
|
||||||
@@ -67,7 +76,6 @@ public class SyncPersonJob
|
|||||||
var existsUpdateWorkCodes = originUpdates.Select(x => x.ZWORKCODE).ToList();
|
var existsUpdateWorkCodes = originUpdates.Select(x => x.ZWORKCODE).ToList();
|
||||||
var originInserts = persons.Where(x => searchCodes.Contains(x.ZWORKCODE)).Where(x => !existsUpdateWorkCodes.Contains(x.ZWORKCODE)).ToList();
|
var originInserts = persons.Where(x => searchCodes.Contains(x.ZWORKCODE)).Where(x => !existsUpdateWorkCodes.Contains(x.ZWORKCODE)).ToList();
|
||||||
|
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
var currentTotal = originUpdates.Count + originInserts.Count;
|
var currentTotal = originUpdates.Count + originInserts.Count;
|
||||||
|
|
||||||
@@ -137,6 +145,8 @@ public class SyncPersonJob
|
|||||||
Position = item.web,
|
Position = item.web,
|
||||||
Remark = item.remark,
|
Remark = item.remark,
|
||||||
Werks = item.WERKS,
|
Werks = item.WERKS,
|
||||||
|
Workplace = _tenants.FirstOrDefault(x => x.Name == item.ZZ_GZDJDNM)?.Code,
|
||||||
|
Factory = _tenants.FirstOrDefault(x => x.Name == item.ZZ_GZDCQNM)?.Code,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (item.isowner == "T")
|
if (item.isowner == "T")
|
||||||
@@ -149,7 +159,7 @@ public class SyncPersonJob
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdatePerson(IDbContext db, GainfoSapEntity item)
|
private void UpdatePerson(IDbContext db, GainfoSapEntity item)
|
||||||
{
|
{
|
||||||
var gainfoSap = db.Queryable<GainfoSapEntity>().Where(x => x.ename == item.ename).First();
|
var gainfoSap = db.Queryable<GainfoSapEntity>().Where(x => x.ename == item.ename).First();
|
||||||
@@ -163,7 +173,9 @@ public class SyncPersonJob
|
|||||||
isowner = item.isowner,
|
isowner = item.isowner,
|
||||||
remark = item.remark,
|
remark = item.remark,
|
||||||
email = item.email,
|
email = item.email,
|
||||||
WERKS = item.WERKS
|
WERKS = item.WERKS,
|
||||||
|
ZZ_GZDJDNM = item.ZZ_GZDJDNM,
|
||||||
|
ZZ_GZDCQNM = item.ZZ_GZDCQNM,
|
||||||
})
|
})
|
||||||
.Where(x => x.ename == item.ename)
|
.Where(x => x.ename == item.ename)
|
||||||
.ExecuteCommand();
|
.ExecuteCommand();
|
||||||
@@ -180,7 +192,9 @@ public class SyncPersonJob
|
|||||||
DepartmentNo = item.appellation,
|
DepartmentNo = item.appellation,
|
||||||
Remark = item.remark,
|
Remark = item.remark,
|
||||||
Degree = item.email,
|
Degree = item.email,
|
||||||
Werks = item.WERKS
|
Werks = item.WERKS,
|
||||||
|
Workplace = item.ZZ_GZDJDNM,
|
||||||
|
Factory = item.ZZ_GZDCQNM
|
||||||
})
|
})
|
||||||
.Where(x => x.Code == item.ename)
|
.Where(x => x.Code == item.ename)
|
||||||
.ExecuteCommand();
|
.ExecuteCommand();
|
||||||
@@ -288,15 +302,18 @@ public class SyncPersonJob
|
|||||||
sex = sex,
|
sex = sex,
|
||||||
web = SubString(position?.Name ?? "", 30),
|
web = SubString(position?.Name ?? "", 30),
|
||||||
logdate = DateTime.Now,
|
logdate = DateTime.Now,
|
||||||
isowner = int.Parse(person.ZSTATUS) < 4 ? "T" : "F",
|
isowner = int.Parse(person.ZSTATUS) < 5 ? "T" : "F",
|
||||||
@class = "C",
|
@class = "C",
|
||||||
country = "CN",
|
country = person.ZZ_COUNNM,
|
||||||
log_ip = "127.0.0.1",
|
log_ip = "127.0.0.1",
|
||||||
log_shift = "1",
|
log_shift = "1",
|
||||||
log_id = "XX",
|
log_id = "XX",
|
||||||
address = "",
|
address = "",
|
||||||
occupation = "99",
|
occupation = "99",
|
||||||
nation = "01"
|
nation = "01",
|
||||||
|
ZZ_COUNNM = person.ZZ_COUNNM,
|
||||||
|
ZZ_GZDJDNM = person.ZZ_GZDJDNM,
|
||||||
|
ZZ_GZDCQNM = person.ZZ_GZDCQNM,
|
||||||
};
|
};
|
||||||
|
|
||||||
return o;
|
return o;
|
||||||
|
|||||||
@@ -9,5 +9,18 @@ public class SapPersonResponse
|
|||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[JsonProperty("T_PERSON")]
|
[JsonProperty("T_PERSON")]
|
||||||
public SapPerson Person { get; set; }
|
public SapPerson<SapPersonItem> Person { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 离职状态
|
||||||
|
/// </summary>
|
||||||
|
[JsonProperty("T_0000")]
|
||||||
|
public SapPerson<SapPersonJobStatus> JobStatusInfo { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 部门变更信息
|
||||||
|
/// </summary>
|
||||||
|
[JsonProperty("T_0001")]
|
||||||
|
public SapPerson<SapPersonDepartmentStatus> DepartmentInfo { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
namespace Dlhis.ScheduledTask.SyncSapInfo.Response
|
||||||
|
{
|
||||||
|
public class UploadAttendanceResponse
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 0 成功
|
||||||
|
/// </summary>
|
||||||
|
public string OLX { get; set; }
|
||||||
|
|
||||||
|
public string OMS { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
using Dlhis.ScheduledTask.SyncSapInfo.Response;
|
||||||
|
|
||||||
|
namespace Dlhis.ScheduledTask.SyncSapInfo.Services
|
||||||
|
{
|
||||||
|
public interface IJinkoJIPService : ISingletonDependency
|
||||||
|
{
|
||||||
|
Task<UploadAttendanceResponse> UploadAttendancesAsync(List<UploadAttendanceRequest> requests);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
using System.IdentityModel.Tokens.Jwt;
|
||||||
|
using System.Net.Http.Headers;
|
||||||
|
using System.Security.Claims;
|
||||||
|
using System.Text;
|
||||||
|
using Dlhis.ScheduledTask.SyncSapInfo.Response;
|
||||||
|
using Kurisu.AspNetCore.Utils.Extensions;
|
||||||
|
using Microsoft.IdentityModel.Tokens;
|
||||||
|
|
||||||
|
namespace Dlhis.ScheduledTask.SyncSapInfo.Services.Implements;
|
||||||
|
|
||||||
|
public class JinkoJIPService : IJinkoJIPService
|
||||||
|
{
|
||||||
|
private readonly IHttpClientFactory _httpClientFactory;
|
||||||
|
private readonly ILogger<JinkoJIPService> _logger;
|
||||||
|
|
||||||
|
public JinkoJIPService(IHttpClientFactory httpClientFactory, ILogger<JinkoJIPService> logger)
|
||||||
|
{
|
||||||
|
_httpClientFactory = httpClientFactory;
|
||||||
|
_logger = logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private HttpClient GetHttpClient()
|
||||||
|
{
|
||||||
|
var httpClient = _httpClientFactory.CreateClient();
|
||||||
|
//httpClient.BaseAddress = new Uri("");
|
||||||
|
//httpClient.Timeout = TimeSpan.FromMinutes(10);
|
||||||
|
var key = "FACE-7409WIBX";
|
||||||
|
var secret = "be0a4b88-cd80-4509-b9b9-865205d0d3d8";
|
||||||
|
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", IssueJwt(key, secret, 5));
|
||||||
|
|
||||||
|
return httpClient;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static string IssueJwt(string jwtKey, string jwtSecret, int mins)
|
||||||
|
{
|
||||||
|
var now = DateTime.Now.AddMinutes(-mins);
|
||||||
|
var expires = DateTime.Now.AddMinutes(mins);
|
||||||
|
|
||||||
|
var claims = new List<Claim>
|
||||||
|
{
|
||||||
|
new Claim(JwtRegisteredClaimNames.Nbf,$"{new DateTimeOffset(now).ToUnixTimeSeconds()}"),
|
||||||
|
new Claim(JwtRegisteredClaimNames.Exp,$"{new DateTimeOffset(expires).ToUnixTimeSeconds()}"),
|
||||||
|
new Claim(JwtRegisteredClaimNames.Iss,jwtKey),
|
||||||
|
};
|
||||||
|
|
||||||
|
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSecret));
|
||||||
|
var descriptor = new SecurityTokenDescriptor
|
||||||
|
{
|
||||||
|
Subject = new ClaimsIdentity(claims),
|
||||||
|
Issuer = jwtKey,
|
||||||
|
IssuedAt = now,
|
||||||
|
NotBefore = now,
|
||||||
|
Expires = expires,
|
||||||
|
SigningCredentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256)
|
||||||
|
};
|
||||||
|
|
||||||
|
var jwtHandler = new JwtSecurityTokenHandler();
|
||||||
|
var securityToken = jwtHandler.CreateToken(descriptor);
|
||||||
|
return jwtHandler.WriteToken(securityToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<UploadAttendanceResponse> UploadAttendancesAsync(List<UploadAttendanceRequest> requests)
|
||||||
|
{
|
||||||
|
var body = new
|
||||||
|
{
|
||||||
|
T_DATA = requests,
|
||||||
|
};
|
||||||
|
|
||||||
|
var json = body.ToJson();
|
||||||
|
|
||||||
|
_logger.LogInformation("上传考勤记录请求:{json}", json);
|
||||||
|
|
||||||
|
var content = new StringContent(json, Encoding.UTF8, "application/json");
|
||||||
|
var response = await GetHttpClient().PostAsync("http://172.16.202.34:8000/JIP/HCM/HCM_SWIPE_DATA_SAVE", content);
|
||||||
|
var responseJson = await response.Content.ReadAsStringAsync();
|
||||||
|
|
||||||
|
_logger.LogInformation("上传考勤记录响应:{json}", responseJson);
|
||||||
|
|
||||||
|
var r = responseJson.ToObject<UploadAttendanceResponse>();
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,8 +1,9 @@
|
|||||||
using System.Net.Http.Headers;
|
using System.Net.Http.Headers;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using Dlhis.Entity.Basic.Entity;
|
||||||
using Dlhis.ScheduledTask.SyncSapInfo.Dto;
|
using Dlhis.ScheduledTask.SyncSapInfo.Dto;
|
||||||
using Dlhis.ScheduledTask.SyncSapInfo.Response;
|
using Dlhis.ScheduledTask.SyncSapInfo.Response;
|
||||||
using Dlhis.Sys.Api;
|
using Kurisu.SqlSugar.Services;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
namespace Dlhis.ScheduledTask.SyncSapInfo.Services.Implements;
|
namespace Dlhis.ScheduledTask.SyncSapInfo.Services.Implements;
|
||||||
@@ -10,14 +11,14 @@ namespace Dlhis.ScheduledTask.SyncSapInfo.Services.Implements;
|
|||||||
public class JinkoSapService : IJinkoSapService
|
public class JinkoSapService : IJinkoSapService
|
||||||
{
|
{
|
||||||
private readonly ILogger<JinkoSapService> _logger;
|
private readonly ILogger<JinkoSapService> _logger;
|
||||||
|
private readonly IDbContext _dbContext;
|
||||||
private readonly IHttpClientFactory _httpClientFactory;
|
private readonly IHttpClientFactory _httpClientFactory;
|
||||||
private readonly ITenantApi _tenantApi;
|
|
||||||
|
|
||||||
public JinkoSapService(IHttpClientFactory httpClientFactory, ILogger<JinkoSapService> logger, ITenantApi tenantApi)
|
public JinkoSapService(IHttpClientFactory httpClientFactory, ILogger<JinkoSapService> logger, IDbContext dbContext)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
|
_dbContext = dbContext;
|
||||||
_httpClientFactory = httpClientFactory;
|
_httpClientFactory = httpClientFactory;
|
||||||
_tenantApi = tenantApi;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private HttpClient GetHttpClient()
|
private HttpClient GetHttpClient()
|
||||||
@@ -64,11 +65,13 @@ public class JinkoSapService : IJinkoSapService
|
|||||||
{
|
{
|
||||||
var apiUrl = "/RESTAdapter/Rest/EHR_PERSONNEL/";
|
var apiUrl = "/RESTAdapter/Rest/EHR_PERSONNEL/";
|
||||||
|
|
||||||
var tenantResult = await _tenantApi.GetTenantsInternalAsync();
|
var werks = await _dbContext.Queryable<WerkEntity>().ToListAsync();
|
||||||
var tenants = tenantResult.Data;
|
|
||||||
|
|
||||||
List<SapPersonItem> persons = new();
|
List<SapPersonItem> persons = new();
|
||||||
foreach (var item in tenants)
|
List<SapPersonJobStatus> jobInfos = new();
|
||||||
|
List<SapPersonDepartmentStatus> departmentInfos = new();
|
||||||
|
|
||||||
|
foreach (var item in werks)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -80,7 +83,7 @@ public class JinkoSapService : IJinkoSapService
|
|||||||
{
|
{
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
WERKS = item.Code
|
WERKS = item.Werk
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -99,6 +102,16 @@ public class JinkoSapService : IJinkoSapService
|
|||||||
{
|
{
|
||||||
persons.AddRange(personResp.Person.Items);
|
persons.AddRange(personResp.Person.Items);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (personResp?.JobStatusInfo?.Items?.Any() == true)
|
||||||
|
{
|
||||||
|
jobInfos.AddRange(personResp.JobStatusInfo.Items);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (personResp?.DepartmentInfo?.Items?.Any() == true)
|
||||||
|
{
|
||||||
|
departmentInfos.AddRange(personResp.DepartmentInfo.Items);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -108,10 +121,18 @@ public class JinkoSapService : IJinkoSapService
|
|||||||
|
|
||||||
return new SapPersonResponse()
|
return new SapPersonResponse()
|
||||||
{
|
{
|
||||||
Person = new SapPerson
|
Person = new SapPerson<SapPersonItem>
|
||||||
{
|
{
|
||||||
Items = persons
|
Items = persons
|
||||||
},
|
},
|
||||||
|
JobStatusInfo = new SapPerson<SapPersonJobStatus>
|
||||||
|
{
|
||||||
|
Items = jobInfos,
|
||||||
|
},
|
||||||
|
DepartmentInfo = new SapPerson<SapPersonDepartmentStatus>
|
||||||
|
{
|
||||||
|
Items = departmentInfos
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
namespace Dlhis.ScheduledTask.SyncSapInfo
|
||||||
|
{
|
||||||
|
public class UploadAttendanceRequest
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// item.CardNo.TrimEnd('\0')
|
||||||
|
/// </summary>
|
||||||
|
public string ZWORKCODE { get; set; }
|
||||||
|
|
||||||
|
public DateTime RaiseTime { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// yyyy-MM-dd
|
||||||
|
/// </summary>
|
||||||
|
public string ZDATE => RaiseTime.ToString("yyyy-MM-dd");
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// HH:mm:ss
|
||||||
|
/// </summary>
|
||||||
|
public string ZTIME => RaiseTime.ToString("HH:mm:ss");
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 设备位置
|
||||||
|
/// </summary>
|
||||||
|
public string ZNOTE { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,18 +1,90 @@
|
|||||||
{
|
{
|
||||||
"Routes": [
|
"Routes": [
|
||||||
{
|
{
|
||||||
"UpstreamPathTemplate": "/api/basic/{url}",
|
"UpstreamPathTemplate": "/api/oauth2/{url}",
|
||||||
"UpstreamHttpMethod": [ "Get", "Post" ],
|
|
||||||
"DownstreamPathTemplate": "/api/{url}",
|
"DownstreamPathTemplate": "/api/{url}",
|
||||||
"DownstreamScheme": "http",
|
"DownstreamScheme": "http",
|
||||||
"DownstreamHostAndPorts": [
|
"DownstreamHostAndPorts": [
|
||||||
{
|
{
|
||||||
"Host": "localhost",
|
"Host": "192.168.199.30",
|
||||||
"Port": 5002
|
"Port": 31001
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"UpstreamPathTemplate": "/api/common/{url}",
|
||||||
|
"DownstreamPathTemplate": "/api/{url}",
|
||||||
|
"DownstreamScheme": "http",
|
||||||
|
"DownstreamHostAndPorts": [
|
||||||
|
{
|
||||||
|
"Host": "192.168.199.30",
|
||||||
|
"Port": 31002
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"UpstreamPathTemplate": "/api/sys/{url}",
|
||||||
|
"DownstreamPathTemplate": "/api/{url}",
|
||||||
|
"DownstreamScheme": "http",
|
||||||
|
"DownstreamHostAndPorts": [
|
||||||
|
{
|
||||||
|
"Host": "192.168.199.30",
|
||||||
|
"Port": 31003
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"UpstreamPathTemplate": "/api/user/{url}",
|
||||||
|
"UpstreamHttpMethod": [
|
||||||
|
"Get",
|
||||||
|
"Post"
|
||||||
|
],
|
||||||
|
"DownstreamPathTemplate": "/api/{url}",
|
||||||
|
"DownstreamScheme": "http",
|
||||||
|
"DownstreamHostAndPorts": [
|
||||||
|
{
|
||||||
|
"Host": "192.168.199.30",
|
||||||
|
"Port": 31004
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"UpstreamPathTemplate": "/api/basic/{url}",
|
||||||
|
"UpstreamHttpMethod": [
|
||||||
|
"Get",
|
||||||
|
"Post"
|
||||||
|
],
|
||||||
|
"DownstreamPathTemplate": "/api/{url}",
|
||||||
|
"DownstreamScheme": "http",
|
||||||
|
"DownstreamHostAndPorts": [
|
||||||
|
{
|
||||||
|
"Host": "192.168.199.30",
|
||||||
|
"Port": 31005
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"UpstreamPathTemplate": "/api/scheduled/{url}",
|
||||||
|
"DownstreamPathTemplate": "/api/{url}",
|
||||||
|
"DownstreamScheme": "http",
|
||||||
|
"DownstreamHostAndPorts": [
|
||||||
|
{
|
||||||
|
"Host": "192.168.199.30",
|
||||||
|
"Port": 31006
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"UpstreamPathTemplate": "/api/canteen/{url}",
|
||||||
|
"DownstreamPathTemplate": "/api/{url}",
|
||||||
|
"DownstreamScheme": "http",
|
||||||
|
"DownstreamHostAndPorts": [
|
||||||
|
{
|
||||||
|
"Host": "192.168.199.30",
|
||||||
|
"Port": 31007
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"GlobalConfiguration": {
|
"GlobalConfiguration": {}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user