diff --git a/Src/Dlhis.Basic.Api/IDingTalkApi.cs b/Src/Dlhis.Basic.Api/IDingTalkApi.cs index 23f0da6c..3b3ca984 100644 --- a/Src/Dlhis.Basic.Api/IDingTalkApi.cs +++ b/Src/Dlhis.Basic.Api/IDingTalkApi.cs @@ -10,4 +10,8 @@ public interface IDingTalkApi { [Post("/api/messages/dingtalk/workmessage")] Task SendWorkMessageAsync(JinkoSendWorkMessageRequest request); + + [Post("dingtalk/workgrid/workmessage")] + Task SendWorkMessageByWorkGridAsync(JinkoSendWorkMessageRequest request); + } \ No newline at end of file diff --git a/Src/Dlhis.Basic.Api/IFactorySettingApi.cs b/Src/Dlhis.Basic.Api/IFactorySettingApi.cs new file mode 100644 index 00000000..cd7637f8 --- /dev/null +++ b/Src/Dlhis.Basic.Api/IFactorySettingApi.cs @@ -0,0 +1,20 @@ +using Kurisu.RemoteCall.Attributes; + +namespace Dlhis.Basic.Api; + +[RequestResultHandler] +[EnableRemoteClient(Name = "basic-service", BaseUrl = "${InternalRequest:BasicRequestUrl}")] +public interface IFactorySettingApi +{ + /// + /// + /// + /// + /// + [Get("/api/factorySetting/enableBirthdayVoucherFactories")] + Task> GetEnableBirthdayVoucherFactoriesAsync(); + + + [Get("/api/factorySetting/enableUseBirthdayVoucherFactories")] + Task> GetEnableUseBirthdayVoucherFactoriesAsync(string factory); +} diff --git a/Src/Dlhis.Basic.Api/ISyncApi.cs b/Src/Dlhis.Basic.Api/ISyncApi.cs index 98a45921..0bc69b52 100644 --- a/Src/Dlhis.Basic.Api/ISyncApi.cs +++ b/Src/Dlhis.Basic.Api/ISyncApi.cs @@ -9,22 +9,43 @@ namespace Dlhis.Basic.Api; [EnableRemoteClient(Name = "longRun-service", BaseUrl = "${InternalRequest:BasicRequestUrl}", PolicyHandler = typeof(LongRunClientHandler))] public interface ISyncApi { + /// + /// 根据人事范围获取员工信息 + /// + /// + /// [Post("/api/sync/gainfo/werk")] [RequestContentHandler(typeof(CodeContentHandler))] Task SyncGainfoByWerkAsync(string code); + /// + /// 根据工号获取员工信息 + /// + /// + /// [Post("/api/sync/gainfo/user")] [RequestContentHandler(typeof(CodeContentHandler))] Task SyncGainfoByUserCodeAsync(string code); + /// + /// 获取组织架构数据 + /// + /// [Get("/api/sync/orgs")] Task SyncOrganizationsAsync(); - + /// + /// 获取职位数据 + /// + /// [Get("/api/sync/positions")] Task GetPositionsAsync(); - + /// + /// 差旅数据处理 + /// + /// + /// [Post("/api/sync/businessTrips")] [RequestContentHandler(typeof(CodeContentHandler))] Task HandlerBusinessTripsAsync(string code); diff --git a/Src/Dlhis.Basic.Api/Response/SapOrganizationItem.cs b/Src/Dlhis.Basic.Api/Response/SapOrganizationItem.cs index e26fe528..47dbe600 100644 --- a/Src/Dlhis.Basic.Api/Response/SapOrganizationItem.cs +++ b/Src/Dlhis.Basic.Api/Response/SapOrganizationItem.cs @@ -41,6 +41,37 @@ public class SapOrganizationItem /// 事业部 /// public string ORGID02 { get; set; } + + /// + /// 一级部门 + /// + public string ORGID03 { get; set; } + + /// + /// 二级部门 + /// + public string ORGID04 { get; set; } + + + /// + /// 三级部门 + /// + public string ORGID05 { get; set; } + + /// + /// 四级部门 + /// + public string ORGID06 { get; set; } + + /// + /// 五级部门 + /// + public string ORGID07 { get; set; } + + /// + /// 六级部门 + /// + public string ORGID08 { get; set; } } diff --git a/Src/Dlhis.Basic/Device/Request/DevicePermissionManuallyAddRequest.cs b/Src/Dlhis.Basic/Device/Request/DevicePermissionManuallyAddRequest.cs index 2ae23a8e..09672c95 100644 --- a/Src/Dlhis.Basic/Device/Request/DevicePermissionManuallyAddRequest.cs +++ b/Src/Dlhis.Basic/Device/Request/DevicePermissionManuallyAddRequest.cs @@ -8,4 +8,9 @@ public class DevicePermissionManuallyAddRequest [Required] public string UserNo { get; set; } + + /// + /// ÓÐЧÆÚʱ¼ä + /// + public DateTime? ValidDateTime { get; set; } } \ No newline at end of file diff --git a/Src/Dlhis.Basic/Device/Response/DevicePermissionManuallyResponse.cs b/Src/Dlhis.Basic/Device/Response/DevicePermissionManuallyResponse.cs index d421f4c4..b32a3f8b 100644 --- a/Src/Dlhis.Basic/Device/Response/DevicePermissionManuallyResponse.cs +++ b/Src/Dlhis.Basic/Device/Response/DevicePermissionManuallyResponse.cs @@ -14,6 +14,8 @@ public class DevicePermissionManuallyResponse public DeviceTypeEnumType? Type { get; set; } + public DateTime? ValidDateTime { get; set; } + public string TypeDesc { get diff --git a/Src/Dlhis.Basic/Device/Services/Implements/BasePermissionAnalyzeService.cs b/Src/Dlhis.Basic/Device/Services/Implements/BasePermissionAnalyzeService.cs index 3e7dae5b..6e119501 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/BasePermissionAnalyzeService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/BasePermissionAnalyzeService.cs @@ -1,6 +1,7 @@ using Dlhis.Basic.Device.Dtos; using Dlhis.Basic.Device.Request; using Dlhis.Basic.Device.Response; +using Dlhis.Basic.Utils; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Device.Entities; using Dlhis.Entity.Device.Enums; diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs index f4668515..4fecfc39 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DeviceGroupService.cs @@ -2,6 +2,7 @@ using Dlhis.Basic.Device.Request; using Dlhis.Basic.Device.Response; using Dlhis.Basic.Organization.Dto; +using Dlhis.Basic.Utils; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Basic.Enums; using Dlhis.Entity.Device.Entities; diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionAnalyzeService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionAnalyzeService.cs index f6da70f8..5502fcae 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionAnalyzeService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionAnalyzeService.cs @@ -3,6 +3,7 @@ using Dlhis.Basic.DataPermissions; using Dlhis.Basic.Device.Dtos; using Dlhis.Basic.Device.Request; using Dlhis.Basic.Organization.Dto; +using Dlhis.Basic.Utils; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Basic.Enums; using Dlhis.Entity.Device.Entities; diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionManuallyService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionManuallyService.cs index a2c3e0c6..4666b5a5 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionManuallyService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionManuallyService.cs @@ -39,7 +39,8 @@ public class DevicePermissionManuallyService : IDevicePermissionManuallyService DeployPlace = d.DeployPlace, UserNo = x.UserNo, UserName = g.Code + " " + g.Name, - Type = d.Type + Type = d.Type, + ValidDateTime = x.ValidDateTime }); return await query.ToPageListAsync(requestDto); @@ -59,7 +60,8 @@ public class DevicePermissionManuallyService : IDevicePermissionManuallyService await _dbContext.InsertAsync(new DevicePermissionManuallyEntity { DeviceCode = request.DeviceCode, - UserNo = request.UserNo + UserNo = request.UserNo, + ValidDateTime = request.ValidDateTime, }); await _dbContext.InsertAsync(new DeviceTaskEntity diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs index f6620c07..40165cc1 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DevicePermissionService.cs @@ -3,6 +3,7 @@ using Dlhis.Basic.Device.Request; using Dlhis.Basic.Device.Response; using Dlhis.Basic.Organization.Dto; using Dlhis.Basic.Organization.Services; +using Dlhis.Basic.Utils; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Basic.Enums; using Dlhis.Entity.Device.Entities; diff --git a/Src/Dlhis.Basic/Device/Services/Implements/PermissionAnalyze/DepartmentPermissionAnalyzeService.cs b/Src/Dlhis.Basic/Device/Services/Implements/PermissionAnalyze/DepartmentPermissionAnalyzeService.cs index 17b8130c..6f2560c8 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/PermissionAnalyze/DepartmentPermissionAnalyzeService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/PermissionAnalyze/DepartmentPermissionAnalyzeService.cs @@ -1,4 +1,5 @@ using Dlhis.Basic.Organization.Dto; +using Dlhis.Basic.Utils; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Device.Enums; diff --git a/Src/Dlhis.Basic/Device/Services/Implements/PermissionAnalyze/GroupPermissionAnalyzeService.cs b/Src/Dlhis.Basic/Device/Services/Implements/PermissionAnalyze/GroupPermissionAnalyzeService.cs index f510cbf5..6e967e32 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/PermissionAnalyze/GroupPermissionAnalyzeService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/PermissionAnalyze/GroupPermissionAnalyzeService.cs @@ -1,3 +1,4 @@ +using Dlhis.Basic.Utils; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Device.Enums; diff --git a/Src/Dlhis.Basic/Organization/Controllers/FactorySettingController.cs b/Src/Dlhis.Basic/Organization/Controllers/FactorySettingController.cs index 3495f1b1..fdfdd380 100644 --- a/Src/Dlhis.Basic/Organization/Controllers/FactorySettingController.cs +++ b/Src/Dlhis.Basic/Organization/Controllers/FactorySettingController.cs @@ -55,4 +55,20 @@ public class FactorySettingController : ControllerBase { return await _factorySettingService.GetFactorySettingAsync(factory, false); } + + [IgnoreTenant] + [AllowAnonymous] + [HttpGet("enableBirthdayVoucherFactories")] + public async Task> GetEnableBirthdayVoucherFactoriesAsync() + { + return await _factorySettingService.GetEnableBirthdayVoucherFactoriesAsync(); + } + + [IgnoreTenant] + [AllowAnonymous] + [HttpGet("enableUseBirthdayVoucherFactories")] + public async Task> GetEnableBirthdayVoucherFactoriesAsync(string factory) + { + return await _factorySettingService.GetEnableUseBirthdayVoucherFactoriesAsync(factory); + } } \ No newline at end of file diff --git a/Src/Dlhis.Basic/Organization/Controllers/GainfoOutsourceController.cs b/Src/Dlhis.Basic/Organization/Controllers/GainfoOutsourceController.cs index 510d579d..58849dfc 100644 --- a/Src/Dlhis.Basic/Organization/Controllers/GainfoOutsourceController.cs +++ b/Src/Dlhis.Basic/Organization/Controllers/GainfoOutsourceController.cs @@ -1,7 +1,10 @@ using System.ComponentModel.DataAnnotations; +using Dlhis.Basic.Organization.Dto; using Dlhis.Basic.Organization.Request; using Dlhis.Basic.Organization.Response; using Dlhis.Basic.Organization.Services; +using Dlhis.Basic.Organization.Services.Implements; +using Kurisu.AspNetCore.DataAccess.Dto; using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop; using Kurisu.AspNetCore.Utils.Extensions; using Microsoft.AspNetCore.Authorization; @@ -18,10 +21,12 @@ namespace Dlhis.Basic.Organization.Controllers; public class GainfoOutsourceController : ControllerBase { private readonly IGainfoOutsourceService _gainfoOutSourceService; + private readonly IOutsourceWhiteListService _outsourceWhiteList; - public GainfoOutsourceController(IGainfoOutsourceService gainfoOutSourceService) + public GainfoOutsourceController(IGainfoOutsourceService gainfoOutSourceService, IOutsourceWhiteListService outsourceWhiteList) { _gainfoOutSourceService = gainfoOutSourceService; + _outsourceWhiteList = outsourceWhiteList; } /// @@ -66,7 +71,6 @@ public class GainfoOutsourceController : ControllerBase /// /// /// - [AllowAnonymous] [HttpGet("info")] public async Task GetExternalInfoAsync([Required] string userNo) { @@ -83,4 +87,37 @@ public class GainfoOutsourceController : ControllerBase { await _gainfoOutSourceService.AutoResignAsync(); } + + /// + /// 获取外包白名单分页数据 + /// + /// + /// + [HttpPost("whiteListPage")] + public async Task> GetPageAsync(OutsourceWhiteListPageRequest request) + { + return await _outsourceWhiteList.GetPageAsync(request); + } + + /// + /// 添加外包白名单 + /// + /// + /// + [HttpPost("setWhiteList")] + public async Task AddAsync(OutsourceWhiteListAddAndRemoveRequest request) + { + await _outsourceWhiteList.AddAsync(request.UserCode); + } + + /// + /// 移除外包白名单 + /// + /// + /// + [HttpPost("removeWhiteList")] + public async Task RemoveAsync(OutsourceWhiteListAddAndRemoveRequest request) + { + await _outsourceWhiteList.RemoveAsync(request.UserCode); + } } \ No newline at end of file diff --git a/Src/Dlhis.Basic/Organization/Request/FactorySettingSaveRequest.cs b/Src/Dlhis.Basic/Organization/Request/FactorySettingSaveRequest.cs index d9676105..a757080e 100644 --- a/Src/Dlhis.Basic/Organization/Request/FactorySettingSaveRequest.cs +++ b/Src/Dlhis.Basic/Organization/Request/FactorySettingSaveRequest.cs @@ -32,4 +32,11 @@ public class FactorySettingSaveRequest /// 访客自动离职天数(无通行记录) /// public int NoRecordAutoResignExternalDays { get; set; } + + /// + /// 是否启用生日电子餐券 + /// + public bool EnableBirthdayVoucher { get; set; } + + public List EnableUseBirthdayVoucherFactories { get; set; } } \ No newline at end of file diff --git a/Src/Dlhis.Basic/Organization/Request/OutsourceWhiteListAddAndRemoveRequest.cs b/Src/Dlhis.Basic/Organization/Request/OutsourceWhiteListAddAndRemoveRequest.cs new file mode 100644 index 00000000..91996a60 --- /dev/null +++ b/Src/Dlhis.Basic/Organization/Request/OutsourceWhiteListAddAndRemoveRequest.cs @@ -0,0 +1,12 @@ +using System.ComponentModel.DataAnnotations; + +namespace Dlhis.Basic.Organization.Request; + +public class OutsourceWhiteListAddAndRemoveRequest +{ + /// + /// 工号 + /// + [Required] + public string UserCode { get; set; } +} diff --git a/Src/Dlhis.Basic/Organization/Request/OutsourceWhiteListPageRequest.cs b/Src/Dlhis.Basic/Organization/Request/OutsourceWhiteListPageRequest.cs new file mode 100644 index 00000000..612ba548 --- /dev/null +++ b/Src/Dlhis.Basic/Organization/Request/OutsourceWhiteListPageRequest.cs @@ -0,0 +1,7 @@ +using Kurisu.AspNetCore.DataAccess.Dto; + +namespace Dlhis.Basic.Organization.Request; + +public class OutsourceWhiteListPageRequest : PageDto +{ +} diff --git a/Src/Dlhis.Basic/Organization/Response/FactorySettingResponse.cs b/Src/Dlhis.Basic/Organization/Response/FactorySettingResponse.cs index 22951946..d5957ccd 100644 --- a/Src/Dlhis.Basic/Organization/Response/FactorySettingResponse.cs +++ b/Src/Dlhis.Basic/Organization/Response/FactorySettingResponse.cs @@ -32,4 +32,11 @@ public class FactorySettingResponse /// 外部人员自动离职天数(无通行记录) /// public int NoRecordAutoResignExternalDays { get; set; } + + /// + /// 是否启用生日电子餐券 + /// + public bool EnableBirthdayVoucher { get; set; } + + public List EnableUseBirthdayVoucherFactories { get; set; } } \ No newline at end of file diff --git a/Src/Dlhis.Basic/Organization/Response/GainfoDetailResponse.cs b/Src/Dlhis.Basic/Organization/Response/GainfoDetailResponse.cs index 59bbc99e..8027b12e 100644 --- a/Src/Dlhis.Basic/Organization/Response/GainfoDetailResponse.cs +++ b/Src/Dlhis.Basic/Organization/Response/GainfoDetailResponse.cs @@ -1,4 +1,5 @@ -using Dlhis.Entity.Basic.Enums; +using Dlhis.Basic.Utils; +using Dlhis.Entity.Basic.Enums; using Kurisu.AspNetCore.Utils.Converters; using Kurisu.AspNetCore.Utils.Extensions; using Newtonsoft.Json; diff --git a/Src/Dlhis.Basic/Organization/Response/GainfoOutSourceExternalInfoResponse.cs b/Src/Dlhis.Basic/Organization/Response/GainfoOutSourceExternalInfoResponse.cs index 7076a426..609e3015 100644 --- a/Src/Dlhis.Basic/Organization/Response/GainfoOutSourceExternalInfoResponse.cs +++ b/Src/Dlhis.Basic/Organization/Response/GainfoOutSourceExternalInfoResponse.cs @@ -6,6 +6,8 @@ namespace Dlhis.Basic.Organization.Response; public class GainfoOutSourceExternalInfoResponse : GainfoOutSourceExternalInfoDto { + public string UserCode { get; set; } + /// /// 对接人姓名 /// @@ -27,4 +29,6 @@ public class GainfoOutSourceExternalInfoResponse : GainfoOutSourceExternalInfoDt /// 厂区 /// public string Factory { get; set; } + + public bool IsWhiteListInAutoResign { get; set; } } \ No newline at end of file diff --git a/Src/Dlhis.Basic/Organization/Response/GainfoPageResponse.cs b/Src/Dlhis.Basic/Organization/Response/GainfoPageResponse.cs index 06ddc9c6..1538450a 100644 --- a/Src/Dlhis.Basic/Organization/Response/GainfoPageResponse.cs +++ b/Src/Dlhis.Basic/Organization/Response/GainfoPageResponse.cs @@ -1,4 +1,5 @@ -using Dlhis.Entity.Basic.Enums; +using Dlhis.Basic.Utils; +using Dlhis.Entity.Basic.Enums; using Kurisu.AspNetCore.Utils.Converters; using Kurisu.AspNetCore.Utils.Extensions; using Newtonsoft.Json; diff --git a/Src/Dlhis.Basic/Organization/Services/IFactorySettingService.cs b/Src/Dlhis.Basic/Organization/Services/IFactorySettingService.cs index e004fd5e..bb201977 100644 --- a/Src/Dlhis.Basic/Organization/Services/IFactorySettingService.cs +++ b/Src/Dlhis.Basic/Organization/Services/IFactorySettingService.cs @@ -14,6 +14,12 @@ public interface IFactorySettingService : IScopeDependency Task GetWorkGridSetLimitAsync(); Task CheckWorkGridSetLimitAsync(DateOnly date); - + Task IsWorkGridSetLimitAsync(DateOnly date); + + Task IsEnableBirthdayVoucherAsync(string factory, bool usePermission); + + Task> GetEnableBirthdayVoucherFactoriesAsync(); + + Task> GetEnableUseBirthdayVoucherFactoriesAsync(string currentFactory); } \ No newline at end of file diff --git a/Src/Dlhis.Basic/Organization/Services/IOutsourceWhiteListService.cs b/Src/Dlhis.Basic/Organization/Services/IOutsourceWhiteListService.cs new file mode 100644 index 00000000..8a3c0f3d --- /dev/null +++ b/Src/Dlhis.Basic/Organization/Services/IOutsourceWhiteListService.cs @@ -0,0 +1,12 @@ +using Dlhis.Basic.Organization.Dto; +using Dlhis.Basic.Organization.Request; +using Kurisu.AspNetCore.DataAccess.Dto; + +namespace Dlhis.Basic.Organization.Services; + +public interface IOutsourceWhiteListService : IScopeDependency +{ + Task> GetPageAsync(OutsourceWhiteListPageRequest request); + Task AddAsync(string userCode); + Task RemoveAsync(string userCode); +} diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/FactorySettingService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/FactorySettingService.cs index 32fb28a8..ce9648d1 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/FactorySettingService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/FactorySettingService.cs @@ -38,6 +38,7 @@ public class FactorySettingService : IFactorySettingService if (setting == null) { setting = request.Adapt(); + setting.EnableUseBirthdayVoucherFactories = request.EnableUseBirthdayVoucherFactories.ToJson(); setting.TenantId = request.Factory; await _dbContext.InsertAsync(setting); @@ -45,12 +46,19 @@ public class FactorySettingService : IFactorySettingService else { request.Adapt(setting); + setting.EnableUseBirthdayVoucherFactories = request.EnableUseBirthdayVoucherFactories.ToJson(); setting.TenantId = request.Factory; await _dbContext.UpdateAsync(setting); } } + public async Task IsEnableBirthdayVoucherAsync(string factory, bool usePermission) + { + var setting = await GetFactorySettingAsync(factory, usePermission); + return setting.EnableBirthdayVoucher; + } + public async Task GetFactorySettingAsync(string factory, bool usePermission) { @@ -102,6 +110,20 @@ public class FactorySettingService : IFactorySettingService return now >= setting; } + + public async Task> GetEnableBirthdayVoucherFactoriesAsync() + { + var settings = await GetListAsync(false); + return settings.Where(x => x.EnableBirthdayVoucher).Select(x => x.Factory).ToList(); + } + + public async Task> GetEnableUseBirthdayVoucherFactoriesAsync(string currentFactory) + { + var settings = await GetFactorySettingsAsync(currentFactory, false); + var setting = settings.Where(x => x.EnableBirthdayVoucher).FirstOrDefault(); + return setting.EnableUseBirthdayVoucherFactories; + } + //************************************************************************************************************************************************************ private async Task> GetFactorySettingsAsync(string factory, bool usePermission) @@ -150,8 +172,11 @@ public class FactorySettingService : IFactorySettingService }).ToList() }, NoRecordAutoResignOutsourceDays = currentSetting?.NoRecordAutoResignOutsourceDays ?? 30, - NoRecordAutoResignExternalDays = currentSetting?.NoRecordAutoResignExternalDays ?? 0 + NoRecordAutoResignExternalDays = currentSetting?.NoRecordAutoResignExternalDays ?? 0, + EnableBirthdayVoucher = currentSetting?.EnableBirthdayVoucher ?? false, + EnableUseBirthdayVoucherFactories = (currentSetting?.EnableUseBirthdayVoucherFactories ?? "[]").ToObject>() }; }).ToList(); } + } \ No newline at end of file diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoFaceService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoFaceService.cs index 9763488b..b213ae89 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoFaceService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoFaceService.cs @@ -3,6 +3,7 @@ using Dlhis.Basic.Organization.Api; using Dlhis.Basic.Organization.Api.Request; using Dlhis.Basic.Organization.Request; using Dlhis.Basic.Organization.Response; +using Dlhis.Basic.ThirdParts; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Basic.Enums; using Dlhis.Entity.Device.Enums; diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoGroupService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoGroupService.cs index efd2020f..1a27914f 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoGroupService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoGroupService.cs @@ -3,6 +3,7 @@ using Dlhis.Basic.Device.Response; using Dlhis.Basic.Device.Services; using Dlhis.Basic.Organization.Request; using Dlhis.Basic.Organization.Response; +using Dlhis.Basic.Utils; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Device.Entities; using Dlhis.Entity.Device.Enums; diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoOutsourceService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoOutsourceService.cs index 93bdb9f9..48cabf13 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoOutsourceService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoOutsourceService.cs @@ -4,6 +4,7 @@ using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Basic.Enums; using Dlhis.Entity.Device.Entities; using Kurisu.AspNetCore.Cache; +using Kurisu.AspNetCore.CustomClass; using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; using Kurisu.AspNetCore.Utils.Extensions; using Mapster; @@ -94,21 +95,28 @@ public class GainfoOutsourceService : IGainfoOutsourceService public async Task GetExternalInfoAsync(string userNo) { - return await _dbContext.Queryable() - .LeftJoin((a, b) => a.Code == b.Code) - .LeftJoin((a, b, c) => a.SapCode == c.Code) - .Where((a, b, c) => b.No == userNo) - .Select((a, b, c) => new GainfoOutSourceExternalInfoResponse - { - Supplier = a.Supplier, - SapCode = a.SapCode, - SapPhone = a.SapPhone, - SapName = c.Name, - EntryDate = b.EntryDate, - ResignationDate = b.ResignationDate, - Factory = b.Factory - }) - .SingleAsync(); + var data = await _dbContext.Queryable() + .LeftJoin((a, b) => a.Code == b.Code) + .LeftJoin((a, b, c) => a.SapCode == c.Code) + .Where((a, b, c) => b.No == userNo) + .Select((a, b, c) => new GainfoOutSourceExternalInfoResponse + { + UserCode = b.Code, + Supplier = a.Supplier, + SapCode = a.SapCode, + SapPhone = a.SapPhone, + SapName = c.Name, + EntryDate = b.EntryDate, + ResignationDate = b.ResignationDate, + Factory = b.Factory + }) + .SingleAsync(); + + data.IsWhiteListInAutoResign = await _dbContext.Queryable() + .Where(x => x.UserCode == data.UserCode) + .AnyAsync(); + + return data; } @@ -116,11 +124,27 @@ public class GainfoOutsourceService : IGainfoOutsourceService { var outsources = await _dbContext.Queryable() .Where(x => x.Type == GainfoUserTypeEnumType.Outsource) + .Where(x => SqlFunc.Subqueryable().Where(p => p.UserCode == x.Code).NotAny())//不存在白名单中 .Select(x => new { x.Id, x.Code, x.Factory, x.CreateTime }) .ToListAsync(); var settings = await _factorySettingService.GetListAsync(false); + var holidaies = await _dbContext + .Queryable() + .Select(x => new + { + x.Type, + Period = new DatePeriod + { + Start = x.Start, + End = x.End + } + }) + .ToListAsync(); + + + var weekends = new List() { DayOfWeek.Saturday, DayOfWeek.Sunday }; foreach (var grp in outsources.GroupBy(x => x.Factory)) { var setting = settings.First(x => x.Factory == grp.Key); @@ -138,26 +162,67 @@ public class GainfoOutsourceService : IGainfoOutsourceService .Select(x => SqlFunc.IsNull(SqlFunc.AggregateMax(x.RaiseDateTime), default(DateTime?))) .SingleAsync(); - if (raiseDateTime.HasValue && raiseDateTime.Value.AddDays(setting.NoRecordAutoResignOutsourceDays) < DateTime.Now) + if (raiseDateTime.HasValue) { - try + var checkDates = GetDaysUntilToday(raiseDateTime.Value); + var days = checkDates.Count; + foreach (var date in checkDates) { - await _gainfoService.ResignAsync(new GainfoResignRequest + //date.DayOfWeek + foreach (var holiday in holidaies) { - Id = outsource.Id, - Reason = $"{setting.NoRecordAutoResignOutsourceDays}天无通行记录", - Date = DateTime.Now - }); + var isPresent = date >= holiday.Period.Start && date <= holiday.Period.Start; + if (isPresent) + { + if (holiday.Type == HolidayEnumType.Rest) + { + days--; + } + } + else + { + if (weekends.Contains(date.DayOfWeek)) + { + days--; + } + } + } } - catch (Exception e) + if (days >= setting.NoRecordAutoResignOutsourceDays) { - _logger.LogError(e, "自动离职外包异常:{msg}", e.Message); + try + { + await _gainfoService.ResignAsync(new GainfoResignRequest + { + Id = outsource.Id, + Reason = $"{setting.NoRecordAutoResignOutsourceDays}天无通行记录", + Date = DateTime.Now + }); + } + catch (Exception e) + { + _logger.LogError(e, "自动离职外包异常:{msg}", e.Message); + } } } } } } + public List GetDaysUntilToday(DateTime begin) + { + var start = DateOnly.FromDateTime(begin.Date); + var today = DateOnly.FromDateTime(DateTime.Today); + if (start > today) return new List(); + + var days = new List(); + for (var d = start; d <= today; d = d.AddDays(1)) + { + days.Add(d); + } + + return days; + } //********************************************************************** help methods *********************************************************************************** diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoUpdateService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoUpdateService.cs index 49897a1a..f1298c9b 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoUpdateService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoUpdateService.cs @@ -345,7 +345,7 @@ public class GainfoUpdateService : IGainfoUpdateService var content = $"{workGrid.Name}的网格长,你好,检测到你网格中 {gainfo.Name}({gainfo.Code}),因发生离职或者异动,现已经删除该员工{dates}的排班信息,请前往系统处理!"; - await _dingTalkApi.SendWorkMessageAsync(new DingTalkWorkMessageRequest + await _dingTalkApi.SendWorkMessageByWorkGridAsync(new DingTalkWorkMessageRequest { Content = content, WorkCodes = new List { workGrid.LeaderUserCode } @@ -409,7 +409,7 @@ public class GainfoUpdateService : IGainfoUpdateService }).SingleAsync(); var content = $"{workGrid.Name}的网格长,你好,检测到你网格中 {gainfo.Name}({gainfo.Code}),因发生离职或者异动,现已经删除该员工{dates}的排班信息,请前往系统处理!"; - await _dingTalkApi.SendWorkMessageAsync(new DingTalkWorkMessageRequest + await _dingTalkApi.SendWorkMessageByWorkGridAsync(new DingTalkWorkMessageRequest { Content = content, WorkCodes = new List { workGrid.LeaderUserCode } diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/OutsourceWhiteListService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/OutsourceWhiteListService.cs new file mode 100644 index 00000000..ced4fc9c --- /dev/null +++ b/Src/Dlhis.Basic/Organization/Services/Implements/OutsourceWhiteListService.cs @@ -0,0 +1,56 @@ + +using Dlhis.Basic.Organization.Dto; +using Dlhis.Basic.Organization.Request; +using Dlhis.Entity.Basic.Entity; +using Dlhis.Entity.Basic.Enums; +using Kurisu.AspNetCore.DataAccess.Dto; +using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions; +using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; +using Kurisu.AspNetCore.Utils.Extensions; + +namespace Dlhis.Basic.Organization.Services.Implements; + +public class OutsourceWhiteListService : IOutsourceWhiteListService +{ + private readonly IDbContext _dbContext; + + public OutsourceWhiteListService(IDbContext dbContext) + { + _dbContext = dbContext; + } + + public async Task AddAsync(string userCode) + { + var gainfo = await _dbContext.Queryable().Where(x => x.Code == userCode).SingleAsync(); + gainfo.ThrowIfNull("人员信息不存在"); + (gainfo.Type == GainfoUserTypeEnumType.Outsource).ThrowIfFalse("人员类型不正确"); + if (!await _dbContext.Queryable().Where(x => x.UserCode == userCode).AnyAsync()) + { + await _dbContext.InsertAsync(new OutsourceWhiteListEntity + { + UserCode = userCode + }); + } + } + + public async Task RemoveAsync(string userCode) + { + var whitelist = await _dbContext.Queryable().Where(x => x.UserCode == userCode).SingleAsync(); + if (whitelist != null) + { + await _dbContext.DeleteAsync(whitelist); + } + } + + public async Task> GetPageAsync(OutsourceWhiteListPageRequest request) + { + return await _dbContext.Queryable() + .LeftJoin((x, ga) => x.UserCode == ga.Code) + .Select((x, ga) => new GainfoDto + { + Code = ga.Code, + Name = ga.Name, + }) + .ToPageListAsync(request); + } +} diff --git a/Src/Dlhis.Basic/HikService.cs b/Src/Dlhis.Basic/ThirdParts/HikService.cs similarity index 96% rename from Src/Dlhis.Basic/HikService.cs rename to Src/Dlhis.Basic/ThirdParts/HikService.cs index 6a2762ca..f0e98c5f 100644 --- a/Src/Dlhis.Basic/HikService.cs +++ b/Src/Dlhis.Basic/ThirdParts/HikService.cs @@ -1,10 +1,9 @@ using System.Text; using Dlhis.Basic.Organization.Request; using Dlhis.Basic.Organization.Response; -using HttpUtil; using Kurisu.AspNetCore.Utils.Extensions; -namespace Dlhis.Basic; +namespace Dlhis.Basic.ThirdParts; public class HikService : IHikService { diff --git a/Src/Dlhis.Basic/HttpUtillib.cs b/Src/Dlhis.Basic/ThirdParts/HttpUtillib.cs similarity index 93% rename from Src/Dlhis.Basic/HttpUtillib.cs rename to Src/Dlhis.Basic/ThirdParts/HttpUtillib.cs index c983ec7a..7b8ec24e 100644 --- a/Src/Dlhis.Basic/HttpUtillib.cs +++ b/Src/Dlhis.Basic/ThirdParts/HttpUtillib.cs @@ -4,7 +4,7 @@ using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; using System.Text; -namespace HttpUtil +namespace Dlhis.Basic.ThirdParts { public class HttpUtillib { @@ -46,7 +46,7 @@ namespace HttpUtil StringBuilder sb = new StringBuilder(); sb.Append(_isHttps ? "https://" : "http://").Append(_ip).Append(":").Append(_port.ToString()).Append(uri); - HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(sb.ToString()); + HttpWebRequest req = (HttpWebRequest)WebRequest.Create(sb.ToString()); req.KeepAlive = false; req.ProtocolVersion = HttpVersion.Version11; req.AllowAutoRedirect = false; // 不允许自动重定向 @@ -73,7 +73,7 @@ namespace HttpUtil StreamReader sr = new StreamReader(rspStream); string strStream = sr.ReadToEnd(); long streamLength = strStream.Length; - byte[] response = System.Text.Encoding.UTF8.GetBytes(strStream); + byte[] response = Encoding.UTF8.GetBytes(strStream); rsp.Close(); return response; } @@ -123,7 +123,7 @@ namespace HttpUtil sb.Append(_isHttps ? "https://" : "http://").Append(_ip).Append(":").Append(_port.ToString()).Append(uri); // 创建POST请求 - HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(sb.ToString()); + HttpWebRequest req = (HttpWebRequest)WebRequest.Create(sb.ToString()); req.KeepAlive = false; req.ProtocolVersion = HttpVersion.Version11; req.AllowAutoRedirect = false; // 不允许自动重定向 @@ -173,7 +173,7 @@ namespace HttpUtil StreamReader sr = new StreamReader(rspStream); string strStream = sr.ReadToEnd(); long streamLength = strStream.Length; - byte[] response = System.Text.Encoding.UTF8.GetBytes(strStream); + byte[] response = Encoding.UTF8.GetBytes(strStream); rsp.Close(); return response; } @@ -241,11 +241,11 @@ namespace HttpUtil } // x-ca-timestamp - string timestamp = ((DateTime.Now.Ticks - TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1, 0, 0, 0, 0)).Ticks) / 1000).ToString(); + string timestamp = ((DateTime.Now.Ticks - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1, 0, 0, 0, 0)).Ticks) / 1000).ToString(); header.Add("x-ca-timestamp", timestamp); // x-ca-nonce - string nonce = System.Guid.NewGuid().ToString(); + string nonce = Guid.NewGuid().ToString(); header.Add("x-ca-nonce", nonce); // x-ca-key @@ -261,7 +261,7 @@ namespace HttpUtil if (_isHttps) { // set remote certificate Validation auto pass - ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(remoteCertificateValidate); + ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(remoteCertificateValidate); // FIX:修复不同.Net版对一些SecurityProtocolType枚举支持情况不一致导致编译失败等问题,这里统一使用数值 //(SecurityProtocolType)48 | ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072 | (SecurityProtocolType)768 | (SecurityProtocolType)192; @@ -277,7 +277,7 @@ namespace HttpUtil private static string computeContentMd5(string body) { MD5 md5 = new MD5CryptoServiceProvider(); - byte[] result = md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(body)); + byte[] result = md5.ComputeHash(Encoding.UTF8.GetBytes(body)); return Convert.ToBase64String(result); } @@ -302,7 +302,7 @@ namespace HttpUtil /// HMAXH265计算结果字符串 private static string computeForHMACSHA256(string str, string secret) { - var encoder = new System.Text.UTF8Encoding(); + var encoder = new UTF8Encoding(); byte[] secretBytes = encoder.GetBytes(secret); byte[] strBytes = encoder.GetBytes(str); var opertor = new HMACSHA256(secretBytes); @@ -325,25 +325,25 @@ namespace HttpUtil { if (null != header["Accept"]) { - sb.Append((string)header["Accept"]); + sb.Append(header["Accept"]); sb.Append("\n"); } if (header.Keys.Contains("Content-MD5") && null != header["Content-MD5"]) { - sb.Append((string)header["Content-MD5"]); + sb.Append(header["Content-MD5"]); sb.Append("\n"); } if (null != header["Content-Type"]) { - sb.Append((string)header["Content-Type"]); + sb.Append(header["Content-Type"]); sb.Append("\n"); } if (header.Keys.Contains("Date") && null != header["Date"]) { - sb.Append((string)header["Date"]); + sb.Append(header["Date"]); sb.Append("\n"); } } diff --git a/Src/Dlhis.Basic/IHikService.cs b/Src/Dlhis.Basic/ThirdParts/IHikService.cs similarity index 82% rename from Src/Dlhis.Basic/IHikService.cs rename to Src/Dlhis.Basic/ThirdParts/IHikService.cs index e8d3988b..a15e1f01 100644 --- a/Src/Dlhis.Basic/IHikService.cs +++ b/Src/Dlhis.Basic/ThirdParts/IHikService.cs @@ -1,6 +1,6 @@ using Dlhis.Basic.Organization.Request; -namespace Dlhis.Basic; +namespace Dlhis.Basic.ThirdParts; public interface IHikService : IScopeDependency { diff --git a/Src/Dlhis.Basic/JinkoSapHttpClientPack.cs b/Src/Dlhis.Basic/Utils/JinkoSapHttpClientPack.cs similarity index 100% rename from Src/Dlhis.Basic/JinkoSapHttpClientPack.cs rename to Src/Dlhis.Basic/Utils/JinkoSapHttpClientPack.cs diff --git a/Src/Dlhis.Basic/ObfuscateProviderJsonConverter.cs b/Src/Dlhis.Basic/Utils/ObfuscateProviderJsonConverter.cs similarity index 98% rename from Src/Dlhis.Basic/ObfuscateProviderJsonConverter.cs rename to Src/Dlhis.Basic/Utils/ObfuscateProviderJsonConverter.cs index 9dc85e8d..f643bee0 100644 --- a/Src/Dlhis.Basic/ObfuscateProviderJsonConverter.cs +++ b/Src/Dlhis.Basic/Utils/ObfuscateProviderJsonConverter.cs @@ -5,7 +5,7 @@ using Kurisu.AspNetCore.Cache; using Kurisu.AspNetCore.Utils.Converters; using Newtonsoft.Json; -namespace Dlhis.Basic; +namespace Dlhis.Basic.Utils; public class ObfuscateProviderJsonConverter : ObfuscateJsonConverter { diff --git a/Src/Dlhis.Basic/ParallelExtensions.cs b/Src/Dlhis.Basic/Utils/ParallelExtensions.cs similarity index 92% rename from Src/Dlhis.Basic/ParallelExtensions.cs rename to Src/Dlhis.Basic/Utils/ParallelExtensions.cs index f330fa41..fbd50e83 100644 --- a/Src/Dlhis.Basic/ParallelExtensions.cs +++ b/Src/Dlhis.Basic/Utils/ParallelExtensions.cs @@ -1,4 +1,4 @@ -namespace Dlhis.Basic; +namespace Dlhis.Basic.Utils; public static class ParallelExtensions { diff --git a/Src/Dlhis.Basic/RecursionHelper.cs b/Src/Dlhis.Basic/Utils/RecursionHelper.cs similarity index 99% rename from Src/Dlhis.Basic/RecursionHelper.cs rename to Src/Dlhis.Basic/Utils/RecursionHelper.cs index 2315f2d6..377039f5 100644 --- a/Src/Dlhis.Basic/RecursionHelper.cs +++ b/Src/Dlhis.Basic/Utils/RecursionHelper.cs @@ -3,7 +3,7 @@ using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Device.Entities; using Kurisu.AspNetCore.Utils.Extensions; -namespace Dlhis.Basic; +namespace Dlhis.Basic.Utils; public static class RecursionHelper { diff --git a/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridScheduleService.cs b/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridScheduleService.cs index 776b3ef6..6d6b6d75 100644 --- a/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridScheduleService.cs +++ b/Src/Dlhis.Basic/WorkGrids/Services/Implements/WorkGridScheduleService.cs @@ -233,7 +233,7 @@ public class WorkGridScheduleService : IWorkGridScheduleService { try { - await _jinkoApiService.SendWorkMessageAsync(new DingTalkWorkMessageRequest + await _jinkoApiService.SendWorkMessageByWorkGridAsync(new DingTalkWorkMessageRequest { Content = $"{gainfo.Name}({gainfo.Code})你好,系统检测到你被{workGridName}网格的网格长{workGridLeaderName}({workGridLeaderCode})安排了{date.ToString("yyyy年MM月dd日")}{periodType.GetDescription()},请按时上班", WorkCodes = new List { gainfo.Code } @@ -333,7 +333,7 @@ public class WorkGridScheduleService : IWorkGridScheduleService { try { - await _jinkoApiService.SendWorkMessageAsync(new DingTalkWorkMessageRequest + await _jinkoApiService.SendWorkMessageByWorkGridAsync(new DingTalkWorkMessageRequest { Content = $"{gainfo.Name}({gainfo.Code})你好,系统检测到你被{workGrid.Name}网格的网格长{workGrid.LeaderUserName}({workGrid.LeaderUserCode})删除了{request.Date.ToString("yyyy年MM月dd日")}{request.PeriodType.GetDescription()},如有疑问,请联系网格长!", WorkCodes = new List { gainfo.Code }