From ee00b66b1143b45a496798c3d83d5d13d1a106f8 Mon Sep 17 00:00:00 2001 From: xiaochanghai Date: Thu, 5 Jun 2025 14:27:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lib/Tiobon.Core.Base.dll | Bin 0 -> 176128 bytes Tiobon.Core.Api/Tiobon.Core.Api.csproj | 6 + Tiobon.Core.Common/Seed/FrameSeed.cs | 3 +- .../AutofacModuleRegister.cs | 2 +- .../Tiobon.Core.Extensions.csproj | 6 + Tiobon.Core.IServices/BASE/IBaseServices.cs | 177 -- .../Ghra/IGhra_JobServices.cs | 5 +- .../Ghra/IGhra_LegalCompanyServices.cs | 5 +- .../Ghra/IGhra_StaffEduBGServices.cs | 5 +- .../Ghra/IGhra_StaffGroupDetailServices.cs | 13 +- .../Ghra/IGhra_StaffGroupServices.cs | 22 +- .../Ghra/IGhra_StaffLicenceServices.cs | 5 +- .../Ghra/IGhra_StaffServices.cs | 6 +- .../Ghra/IGhra_StaffSocialRelationServices.cs | 5 +- .../Ghra/IGhra_StaffTrainingServices.cs | 5 +- .../Ghra/IGhra_StaffWorkExpServices.cs | 5 +- .../Ghra/IGhra_ZoneServices.cs | 5 +- .../Ghrc/IGhrc_PeriodMasterServices.cs | 5 +- .../Ghrc/IGhrc_SalaryItemServices.cs | 5 +- .../Ghre/IGhre_AttachmentServices.cs | 5 +- .../Ghre/IGhre_ConfigGroupServices.cs | 5 +- .../Ghre/IGhre_ConfigServices.cs | 6 +- .../Ghre/IGhre_CourseClassServices.cs | 5 +- .../Ghre/IGhre_CourseServices.cs | 3 - .../Ghre/IGhre_CourseSnapServices.cs | 5 +- .../IGhre_CourseWareAttachmentServices.cs | 5 +- .../Ghre/IGhre_CourseWareServices.cs | 6 +- .../Ghre/IGhre_CreditPointServices.cs | 3 - .../Ghre/IGhre_ExamMessageLogServices.cs | 5 +- .../Ghre/IGhre_ExamPaperConfigServices.cs | 5 +- .../Ghre/IGhre_ExamPaperQuestionServices.cs | 5 +- .../Ghre/IGhre_ExamPaperServices.cs | 3 - .../Ghre/IGhre_ExamRecordAnswerServices.cs | 5 +- .../Ghre/IGhre_ExamRecordDetailServices.cs | 5 +- .../Ghre/IGhre_ExamServices.cs | 3 - .../Ghre/IGhre_ExamStaffServices.cs | 5 +- .../Ghre/IGhre_QuestionAnswerServices.cs | 5 +- .../Ghre/IGhre_QuestionServices.cs | 6 +- .../Ghre/IGhre_RequiredCourseServices.cs | 5 +- .../Ghre/IGhre_SchoolAttachmentServices.cs | 5 +- .../Ghre/IGhre_SchoolServices.cs | 5 +- .../Ghre/IGhre_StudyRecordDetailServices.cs | 5 +- .../Ghre/IGhre_StudyRuleResultServices.cs | 5 +- .../Ghre/IGhre_StudyRuleStaffServices.cs | 5 +- .../Ghre/IGhre_TeacherAttachmentServices.cs | 5 +- .../IGhre_TeacherChangeAttachmentServices.cs | 5 +- .../Ghre/IGhre_TeacherChangeServices.cs | 6 +- .../Ghre/IGhre_TeacherServices.cs | 6 +- .../Ghrh/IGhrh_AssessConfigServices.cs | 5 +- .../Ghrh/IGhrh_ConfigGroupServices.cs | 6 +- .../Ghrh/IGhrh_ConfigServices.cs | 6 +- .../Ghrh/IGhrh_HumanRequestDetailServices.cs | 5 +- .../Ghrh/IGhrh_HumanRequestServices.cs | 3 - .../IGhrh_InterviewAssessDetailServices.cs | 5 +- .../Ghrh/IGhrh_InterviewAssessServices.cs | 5 +- .../Ghrh/IGhrh_InterviewLogServices.cs | 5 +- .../Ghrh/IGhrh_InterviewOrderServices.cs | 5 +- .../Ghrh/IGhrh_InterviewRecordServices.cs | 5 +- .../IGhrh_OfferApplyOrderSalaryServices.cs | 5 +- .../Ghrh/IGhrh_OfferApplyOrderServices.cs | 6 +- .../Ghrh/IGhrh_ResumeEduBGServices.cs | 5 +- .../Ghrh/IGhrh_ResumeHomeServices.cs | 5 +- .../Ghrh/IGhrh_ResumeInfoColumnServices.cs | 5 +- .../Ghrh/IGhrh_ResumeInfoGroupServices.cs | 5 +- .../Ghrh/IGhrh_ResumeLicenceServices.cs | 5 +- .../Ghrh/IGhrh_ResumeServices.cs | 4 - .../Ghrh/IGhrh_ResumeStatementServices.cs | 5 +- .../Ghrh/IGhrh_ResumeTagServices.cs | 5 +- .../Ghrh/IGhrh_ResumeTemplateServices.cs | 3 - .../Ghrh/IGhrh_ResumeTrainingServices.cs | 5 +- .../Ghrh/IGhrh_ResumeWorkExpServices.cs | 5 +- .../Ghrh/IGhrh_StatementServices.cs | 5 +- .../Ghrh/IGhrh_TemplateServices.cs | 6 +- .../Ghrh/IGhrh_YearHumanApplyOrderServices.cs | 6 +- .../Ghrh/IGhrh_YearHumanSettingsServices.cs | 6 +- .../Ghrm/IGhrm_MessageTextServices.cs | 5 +- .../Ghrm/IGhrm_MessageUserServices.cs | 5 +- .../Ghro/IGhro_DeptServices.cs | 5 +- .../Ghrp/IGhrp_PerformanceItemServices.cs | 14 +- .../Ghrp/IGhrp_PerformancePeriodServices.cs | 15 +- .../IGhrp_PerformancePeriodTypeServices.cs | 14 +- .../Ghrp/IGhrp_PerformanceTemplateServices.cs | 13 +- .../Ghrs/IGhrs_AttachmentServices.cs | 5 +- .../Ghrs/IGhrs_DataRoleDetailServices.cs | 5 +- .../Ghrs/IGhrs_LangKeyServices.cs | 6 +- .../Ghrs/IGhrs_ListCommonSqlServices.cs | 5 +- .../Ghrs/IGhrs_MailOutboxServices.cs | 5 +- .../Ghrs/IGhrs_MenuServices.cs | 5 +- .../Ghrs/IGhrs_ParaDetailServices.cs | 5 +- .../Ghrs/IGhrs_UserServices.cs | 5 +- .../IGhrz_Shihua_OA_EmploymentServices.cs | 5 +- Tiobon.Core.IServices/GlobalUsings.cs | 6 +- Tiobon.Core.IServices/ICommonServices.cs | 3 - .../IDS4Db/IApplicationUserServices.cs | 3 +- Tiobon.Core.IServices/IDepartmentServices.cs | 5 +- Tiobon.Core.IServices/IGhra_GradeServices.cs | 7 +- Tiobon.Core.IServices/IModuleServices.cs | 5 +- Tiobon.Core.IServices/IOperateLogServices.cs | 5 +- Tiobon.Core.IServices/IPasswordLibServices.cs | 5 +- Tiobon.Core.IServices/IPermissionServices.cs | 4 +- Tiobon.Core.IServices/IReportServices.cs | 3 - .../IRoleModulePermissionServices.cs | 3 - Tiobon.Core.IServices/IRoleServices.cs | 3 - Tiobon.Core.IServices/ISplitDemoServices.cs | 5 - Tiobon.Core.IServices/ITasksLogServices.cs | 6 +- Tiobon.Core.IServices/ITasksQzServices.cs | 6 +- Tiobon.Core.IServices/ITenantService.cs | 5 +- Tiobon.Core.IServices/IUserRoleServices.cs | 3 - Tiobon.Core.IServices/IsysUserInfoServices.cs | 5 - .../Tiobon.Core.IServices.csproj | 6 + Tiobon.Core.Services/BASE/BaseServices.cs | 2322 ----------------- Tiobon.Core.Services/BASE/BaseServices1.cs | 328 --- Tiobon.Core.Services/GlobalUsings.cs | 1 - .../Tiobon.Core.Services.csproj | 7 + Tiobon.Core.Tasks/Tiobon.Core.Tasks.csproj | 6 + Tiobon.Core.Tests/Tiobon.Core.Tests.csproj | 6 + 116 files changed, 159 insertions(+), 3279 deletions(-) create mode 100644 Lib/Tiobon.Core.Base.dll delete mode 100644 Tiobon.Core.IServices/BASE/IBaseServices.cs delete mode 100644 Tiobon.Core.Services/BASE/BaseServices.cs delete mode 100644 Tiobon.Core.Services/BASE/BaseServices1.cs diff --git a/Lib/Tiobon.Core.Base.dll b/Lib/Tiobon.Core.Base.dll new file mode 100644 index 0000000000000000000000000000000000000000..18efcb21a8d5eb047b465d81645d3c690efc32c9 GIT binary patch literal 176128 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 z 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 + + + ..\Lib\Tiobon.Core.Base.dll + + + diff --git a/Tiobon.Core.Common/Seed/FrameSeed.cs b/Tiobon.Core.Common/Seed/FrameSeed.cs index 45980b43..a6d020ab 100644 --- a/Tiobon.Core.Common/Seed/FrameSeed.cs +++ b/Tiobon.Core.Common/Seed/FrameSeed.cs @@ -892,8 +892,7 @@ namespace " + strNameSpace + @" var ls = IDbFirst.IsCreateDefaultValue().IsCreateAttribute() .SettingClassTemplate(p => p = -@"using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models" + (isMuti ? "." + ConnId + "" : "") + @"; +@"using Tiobon.Core.Model.Models" + (isMuti ? "." + ConnId + "" : "") + @"; namespace " + strNameSpace + @" { diff --git a/Tiobon.Core.Extensions/ServiceExtensions/AutofacModuleRegister.cs b/Tiobon.Core.Extensions/ServiceExtensions/AutofacModuleRegister.cs index 58266d2c..7ac2453c 100644 --- a/Tiobon.Core.Extensions/ServiceExtensions/AutofacModuleRegister.cs +++ b/Tiobon.Core.Extensions/ServiceExtensions/AutofacModuleRegister.cs @@ -3,9 +3,9 @@ using Autofac.Extras.DynamicProxy; using Serilog; using System.Reflection; using Tiobon.Core.AOP; +using Tiobon.Core.Base.IServices; using Tiobon.Core.Common; using Tiobon.Core.IRepository.Base; -using Tiobon.Core.IServices.BASE; using Tiobon.Core.Model; using Tiobon.Core.Repository.Base; using Tiobon.Core.Repository.UnitOfWorks; diff --git a/Tiobon.Core.Extensions/Tiobon.Core.Extensions.csproj b/Tiobon.Core.Extensions/Tiobon.Core.Extensions.csproj index 2244dc66..30a4a57e 100644 --- a/Tiobon.Core.Extensions/Tiobon.Core.Extensions.csproj +++ b/Tiobon.Core.Extensions/Tiobon.Core.Extensions.csproj @@ -41,4 +41,10 @@ + + + ..\Lib\Tiobon.Core.Base.dll + + + diff --git a/Tiobon.Core.IServices/BASE/IBaseServices.cs b/Tiobon.Core.IServices/BASE/IBaseServices.cs deleted file mode 100644 index 5985f4e5..00000000 --- a/Tiobon.Core.IServices/BASE/IBaseServices.cs +++ /dev/null @@ -1,177 +0,0 @@ -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using SqlSugar; -using System.Data; -using System.Linq.Expressions; -using Tiobon.Core.Common; -using Tiobon.Core.Model; - -namespace Tiobon.Core.IServices.BASE; - -public interface IBaseServices where TEntity : class -{ - ISqlSugarClient Db { get; } - - Task QueryById(object objId); - Task QueryById(object objId, bool blnUseCache = false); - Task> QueryByIDs(object[] lstIds); - - Task Add(TEntity model); - - Task> Add(List listEntity); - - Task DeleteById(object id); - - Task Delete(TEntity model); - - Task DeleteByIds(object[] ids); - - Task Update(TEntity model); - Task Update(List model); - Task Update(TEntity entity, string where); - - Task Update(object operateAnonymousObjects); - - Task Update(TEntity entity, List lstColumns = null, List lstIgnoreColumns = null, string where = ""); - - Task> Query(); - Task> Query(string where); - Task> Query(Expression> whereExpression); - Task> Query(Expression> whereExpression, string orderByFields); - Task> Query(Expression> expression); - Task> Query(Expression> expression, Expression> whereExpression, string orderByFields); - Task> Query(Expression> whereExpression, Expression> orderByExpression, bool isAsc = true); - Task> Query(string where, string orderByFields); - Task> QuerySql(string sql, SugarParameter[] parameters = null); - Task QueryTable(string sql, SugarParameter[] parameters = null); - - Task> Query(Expression> whereExpression, int top, string orderByFields); - Task> Query(string where, int top, string orderByFields); - - Task> Query( - Expression> whereExpression, int pageIndex, int pageSize, string orderByFields); - Task> Query(string where, int pageIndex, int pageSize, string orderByFields); - - - Task> QueryPage(Expression> whereExpression, int pageIndex = 1, int pageSize = 20, string orderByFields = null); - - Task> QueryMuch( - Expression> joinExpression, - Expression> selectExpression, - Expression> whereLambda = null) where T : class, new(); - Task> QueryPage(PaginationModel pagination); - - #region 分表 - Task QueryByIdSplit(object objId); - Task> AddSplit(TEntity entity); - Task DeleteSplit(TEntity entity, DateTime dateTime); - Task UpdateSplit(TEntity entity, DateTime dateTime); - Task> QueryPageSplit(Expression> whereExpression, DateTime beginTime, DateTime endTime, int pageIndex = 1, int pageSize = 20, string orderByFields = null); - #endregion -} - - -/// -/// 增删改查接口 -/// -/// -/// -/// -/// -public interface IBaseServices where TEntity : class -{ - ISqlSugarClient Db { get; } - - Task AnyAsync(object objId); - - Task AnyAsync(Expression> whereExpression); - - /// - /// 根据ID查询实体数据是否存在 - /// - /// - /// - Task QueryById(object objId); - Task QueryById(object objId, bool blnUseCache = false); - Task> QueryByIDs(object[] lstIds); - - Task> QueryForm(QueryForm body); - - Task Add(TInsertDto model); - - Task> Add(List listEntity); - - Task DeleteById(object id); - Task DeleteById1(object id); - - Task Delete(TEntity model); - - Task DeleteByIds(object[] ids); - Task DeleteByIds1(long[] ids); - - /// - /// 根据表达式,删除实体 - /// - /// - /// - Task Delete(Expression> whereExpression); - - Task Update(long Id, TEditDto model); - Task Update(long Id, TEditDto model, List lstColumns = null, List lstIgnoreColumns = null, string where = ""); - - Task Update(Dictionary editModels); - Task Update(List model); - Task Update(TEntity entity, string where); - - Task Update(object operateAnonymousObjects); - - Task Update(TEntity entity, List lstColumns = null, List lstIgnoreColumns = null, string where = ""); - Task Update(List entitys, List lstColumns = null, List lstIgnoreColumns = null, string where = ""); - - Task> Query(); - Task> Query(string where); - Task> Query(Expression> whereExpression); - - Task> QueryDto(Expression> whereExpression); - Task QuerySingle(object objId); - Task QuerySingle(Expression> whereExpression); - Task QuerySingleDto(Expression> whereExpression); - Task> Query(Expression> whereExpression, string orderByFields); - Task> Query(Expression> expression); - Task> Query(Expression> expression, Expression> whereExpression, string orderByFields); - Task> Query(Expression> whereExpression, Expression> orderByExpression, bool isAsc = true); - Task> Query(string where, string orderByFields); - Task> QuerySql(string sql, SugarParameter[] parameters = null); - Task QueryTable(string sql, SugarParameter[] parameters = null); - - Task> Query(Expression> whereExpression, int top, string orderByFields); - Task> Query(string where, int top, string orderByFields); - - Task> Query( - Expression> whereExpression, int pageIndex, int pageSize, string orderByFields); - Task> Query(string where, int pageIndex, int pageSize, string orderByFields); - - - Task> QueryPage(Expression> whereExpression, int pageIndex = 1, int pageSize = 20, string orderByFields = null); - Task> QueryFilterPage([FromBody] QueryBody body); - Task> QueryFilterPage(QueryBody filter, string condition, bool? IsEnable = true); - Task> ExportExcel(QueryExport body); - - Task> ImportExcel(IFormFile file, string menuName = null, long? MasterId = null); - - Task> DownloadExcel(string menuName); - - Task> QueryMuch( - Expression> joinExpression, - Expression> selectExpression, - Expression> whereLambda = null) where T : class, new(); - Task> QueryPage(PaginationModel pagination); - - #region 分表 - Task QueryByIdSplit(object objId); - Task> AddSplit(TEntity entity); - Task DeleteSplit(TEntity entity, DateTime dateTime); - Task UpdateSplit(TEntity entity, DateTime dateTime); - Task> QueryPageSplit(Expression> whereExpression, DateTime beginTime, DateTime endTime, int pageIndex = 1, int pageSize = 20, string orderByFields = null); - #endregion -} diff --git a/Tiobon.Core.IServices/Ghra/IGhra_JobServices.cs b/Tiobon.Core.IServices/Ghra/IGhra_JobServices.cs index c466e21a..ca4a4b56 100644 --- a/Tiobon.Core.IServices/Ghra/IGhra_JobServices.cs +++ b/Tiobon.Core.IServices/Ghra/IGhra_JobServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// Ghra_Job(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghra/IGhra_LegalCompanyServices.cs b/Tiobon.Core.IServices/Ghra/IGhra_LegalCompanyServices.cs index 72372570..3981782b 100644 --- a/Tiobon.Core.IServices/Ghra/IGhra_LegalCompanyServices.cs +++ b/Tiobon.Core.IServices/Ghra/IGhra_LegalCompanyServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// Ghra_LegalCompany(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghra/IGhra_StaffEduBGServices.cs b/Tiobon.Core.IServices/Ghra/IGhra_StaffEduBGServices.cs index ae8394ee..cb2f20ac 100644 --- a/Tiobon.Core.IServices/Ghra/IGhra_StaffEduBGServices.cs +++ b/Tiobon.Core.IServices/Ghra/IGhra_StaffEduBGServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// Ghra_StaffEduBG(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghra/IGhra_StaffGroupDetailServices.cs b/Tiobon.Core.IServices/Ghra/IGhra_StaffGroupDetailServices.cs index 554c32fc..89452bbc 100644 --- a/Tiobon.Core.IServices/Ghra/IGhra_StaffGroupDetailServices.cs +++ b/Tiobon.Core.IServices/Ghra/IGhra_StaffGroupDetailServices.cs @@ -1,11 +1,8 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices -{ - /// - /// 人员群组明细(自定义服务接口) - /// +namespace Tiobon.Core.IServices +{ + /// + /// 人员群组明细(自定义服务接口) + /// public interface IGhra_StaffGroupDetailServices :IBaseServices { } diff --git a/Tiobon.Core.IServices/Ghra/IGhra_StaffGroupServices.cs b/Tiobon.Core.IServices/Ghra/IGhra_StaffGroupServices.cs index bddd0c9d..3bd218d8 100644 --- a/Tiobon.Core.IServices/Ghra/IGhra_StaffGroupServices.cs +++ b/Tiobon.Core.IServices/Ghra/IGhra_StaffGroupServices.cs @@ -1,16 +1,10 @@ -using Newtonsoft.Json.Linq; -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model; -using Tiobon.Core.Model.Models; +namespace Tiobon.Core.IServices; -namespace Tiobon.Core.IServices -{ - /// - /// 人员群组(自定义服务接口) - /// - public interface IGhra_StaffGroupServices :IBaseServices - { - Task> GetStaffInfoColumnData(); - Task>> GetStaffGroupInfoByID(long Id, JObject FBody); - } +/// +/// 人员群组(自定义服务接口) +/// +public interface IGhra_StaffGroupServices : IBaseServices +{ + Task> GetStaffInfoColumnData(); + Task>> GetStaffGroupInfoByID(long Id, JObject FBody); } \ No newline at end of file diff --git a/Tiobon.Core.IServices/Ghra/IGhra_StaffLicenceServices.cs b/Tiobon.Core.IServices/Ghra/IGhra_StaffLicenceServices.cs index daa3cf7d..2d5ff445 100644 --- a/Tiobon.Core.IServices/Ghra/IGhra_StaffLicenceServices.cs +++ b/Tiobon.Core.IServices/Ghra/IGhra_StaffLicenceServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// Ghra_StaffLicence(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghra/IGhra_StaffServices.cs b/Tiobon.Core.IServices/Ghra/IGhra_StaffServices.cs index 842e6e3d..f53e973e 100644 --- a/Tiobon.Core.IServices/Ghra/IGhra_StaffServices.cs +++ b/Tiobon.Core.IServices/Ghra/IGhra_StaffServices.cs @@ -1,8 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// Ghra_Staff(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghra/IGhra_StaffSocialRelationServices.cs b/Tiobon.Core.IServices/Ghra/IGhra_StaffSocialRelationServices.cs index de886554..4bc21d79 100644 --- a/Tiobon.Core.IServices/Ghra/IGhra_StaffSocialRelationServices.cs +++ b/Tiobon.Core.IServices/Ghra/IGhra_StaffSocialRelationServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// Ghra_StaffSocialRelation(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghra/IGhra_StaffTrainingServices.cs b/Tiobon.Core.IServices/Ghra/IGhra_StaffTrainingServices.cs index eedd0211..1128a701 100644 --- a/Tiobon.Core.IServices/Ghra/IGhra_StaffTrainingServices.cs +++ b/Tiobon.Core.IServices/Ghra/IGhra_StaffTrainingServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// Ghra_StaffTraining(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghra/IGhra_StaffWorkExpServices.cs b/Tiobon.Core.IServices/Ghra/IGhra_StaffWorkExpServices.cs index cb598ed6..d61dffe2 100644 --- a/Tiobon.Core.IServices/Ghra/IGhra_StaffWorkExpServices.cs +++ b/Tiobon.Core.IServices/Ghra/IGhra_StaffWorkExpServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// Ghra_StaffWorkExp(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghra/IGhra_ZoneServices.cs b/Tiobon.Core.IServices/Ghra/IGhra_ZoneServices.cs index 007ef316..fef294da 100644 --- a/Tiobon.Core.IServices/Ghra/IGhra_ZoneServices.cs +++ b/Tiobon.Core.IServices/Ghra/IGhra_ZoneServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 厂区(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrc/IGhrc_PeriodMasterServices.cs b/Tiobon.Core.IServices/Ghrc/IGhrc_PeriodMasterServices.cs index 5edf6580..836f57fb 100644 --- a/Tiobon.Core.IServices/Ghrc/IGhrc_PeriodMasterServices.cs +++ b/Tiobon.Core.IServices/Ghrc/IGhrc_PeriodMasterServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// Ghrc_PeriodMaster(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrc/IGhrc_SalaryItemServices.cs b/Tiobon.Core.IServices/Ghrc/IGhrc_SalaryItemServices.cs index dc7a5d63..c62b0175 100644 --- a/Tiobon.Core.IServices/Ghrc/IGhrc_SalaryItemServices.cs +++ b/Tiobon.Core.IServices/Ghrc/IGhrc_SalaryItemServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// Ghrc_SalaryItem(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghre/IGhre_AttachmentServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_AttachmentServices.cs index 8275b8fd..f88832e6 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_AttachmentServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_AttachmentServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model; -using Tiobon.Core.Model.Models; -using Tiobon.Core.Model.ViewModels; +using Tiobon.Core.Model.ViewModels; namespace Tiobon.Core.IServices; diff --git a/Tiobon.Core.IServices/Ghre/IGhre_ConfigGroupServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_ConfigGroupServices.cs index 026ef82c..f77dad5b 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_ConfigGroupServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_ConfigGroupServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 参数配置组(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghre/IGhre_ConfigServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_ConfigServices.cs index 16509eb6..c64f617c 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_ConfigServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_ConfigServices.cs @@ -1,8 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 参数配置(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghre/IGhre_CourseClassServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_CourseClassServices.cs index 7fe4252b..41df1f58 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_CourseClassServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_CourseClassServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 课程分类(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghre/IGhre_CourseServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_CourseServices.cs index a0c75960..a272ac59 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_CourseServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_CourseServices.cs @@ -1,7 +1,4 @@ using Tiobon.Core.Common; -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model; -using Tiobon.Core.Model.Models; using Tiobon.Core.Model.ViewModels.Extend; namespace Tiobon.Core.IServices; diff --git a/Tiobon.Core.IServices/Ghre/IGhre_CourseSnapServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_CourseSnapServices.cs index e12ed2ae..16a0e4c8 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_CourseSnapServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_CourseSnapServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// Ghre_CourseSnap(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghre/IGhre_CourseWareAttachmentServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_CourseWareAttachmentServices.cs index 8f7721a5..9c29c0b0 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_CourseWareAttachmentServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_CourseWareAttachmentServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 课件附件(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghre/IGhre_CourseWareServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_CourseWareServices.cs index b0bbbd9b..d92f7a91 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_CourseWareServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_CourseWareServices.cs @@ -1,8 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 课件(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghre/IGhre_CreditPointServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_CreditPointServices.cs index 26d828c9..97dbcfa5 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_CreditPointServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_CreditPointServices.cs @@ -1,7 +1,4 @@ using Tiobon.Core.Common; -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model; -using Tiobon.Core.Model.Models; namespace Tiobon.Core.IServices; diff --git a/Tiobon.Core.IServices/Ghre/IGhre_ExamMessageLogServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_ExamMessageLogServices.cs index c17a34bd..f2cc39ae 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_ExamMessageLogServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_ExamMessageLogServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 考试通知记录(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghre/IGhre_ExamPaperConfigServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_ExamPaperConfigServices.cs index 5dbd1f4e..1f6b3d8c 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_ExamPaperConfigServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_ExamPaperConfigServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 试卷配置(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghre/IGhre_ExamPaperQuestionServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_ExamPaperQuestionServices.cs index 474d33c8..806e89f5 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_ExamPaperQuestionServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_ExamPaperQuestionServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 试卷题目(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghre/IGhre_ExamPaperServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_ExamPaperServices.cs index b0957936..70b99ffb 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_ExamPaperServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_ExamPaperServices.cs @@ -1,8 +1,5 @@ using Microsoft.AspNetCore.Mvc; using Tiobon.Core.Common; -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model; -using Tiobon.Core.Model.Models; namespace Tiobon.Core.IServices; diff --git a/Tiobon.Core.IServices/Ghre/IGhre_ExamRecordAnswerServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_ExamRecordAnswerServices.cs index 5e369ddc..d77f731d 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_ExamRecordAnswerServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_ExamRecordAnswerServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// Ghre_ExamRecordAnswer(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghre/IGhre_ExamRecordDetailServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_ExamRecordDetailServices.cs index 88487653..42216187 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_ExamRecordDetailServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_ExamRecordDetailServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// Ghre_ExamRecordDetail(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghre/IGhre_ExamServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_ExamServices.cs index 3a725319..ceda8442 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_ExamServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_ExamServices.cs @@ -1,7 +1,4 @@ using Tiobon.Core.Common; -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model; -using Tiobon.Core.Model.Models; namespace Tiobon.Core.IServices; diff --git a/Tiobon.Core.IServices/Ghre/IGhre_ExamStaffServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_ExamStaffServices.cs index a5c6e04c..2a726950 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_ExamStaffServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_ExamStaffServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// Ghre_ExamStaff(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghre/IGhre_QuestionAnswerServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_QuestionAnswerServices.cs index 0d5f12f2..5aa132b5 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_QuestionAnswerServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_QuestionAnswerServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 题目答案(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghre/IGhre_QuestionServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_QuestionServices.cs index b7e540f3..badcbc98 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_QuestionServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_QuestionServices.cs @@ -1,8 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 题目(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghre/IGhre_RequiredCourseServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_RequiredCourseServices.cs index d46750f4..c17c1d38 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_RequiredCourseServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_RequiredCourseServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 必选修查询(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghre/IGhre_SchoolAttachmentServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_SchoolAttachmentServices.cs index f2a75f63..14f4df5f 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_SchoolAttachmentServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_SchoolAttachmentServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 培训机构附件(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghre/IGhre_SchoolServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_SchoolServices.cs index dad8405e..3fdc3b49 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_SchoolServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_SchoolServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 培训机构(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghre/IGhre_StudyRecordDetailServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_StudyRecordDetailServices.cs index 7de92971..9cda08bc 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_StudyRecordDetailServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_StudyRecordDetailServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 培训记录明细(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghre/IGhre_StudyRuleResultServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_StudyRuleResultServices.cs index 6b1937a4..fbf6eaad 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_StudyRuleResultServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_StudyRuleResultServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 必选修规则结果(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghre/IGhre_StudyRuleStaffServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_StudyRuleStaffServices.cs index 9bc0a25d..3f04919f 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_StudyRuleStaffServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_StudyRuleStaffServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 必选修规则人员(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghre/IGhre_TeacherAttachmentServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_TeacherAttachmentServices.cs index fd6e7957..929bd77b 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_TeacherAttachmentServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_TeacherAttachmentServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// Ghre_TeacherAttachment(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghre/IGhre_TeacherChangeAttachmentServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_TeacherChangeAttachmentServices.cs index 5f3f63a4..fe9344f0 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_TeacherChangeAttachmentServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_TeacherChangeAttachmentServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 培训讲师异动附件(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghre/IGhre_TeacherChangeServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_TeacherChangeServices.cs index c1d3e2a6..3018bcb4 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_TeacherChangeServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_TeacherChangeServices.cs @@ -1,8 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 培训讲师异动(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghre/IGhre_TeacherServices.cs b/Tiobon.Core.IServices/Ghre/IGhre_TeacherServices.cs index 3b3709c5..7bb3ae0c 100644 --- a/Tiobon.Core.IServices/Ghre/IGhre_TeacherServices.cs +++ b/Tiobon.Core.IServices/Ghre/IGhre_TeacherServices.cs @@ -1,8 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// Ghre_Teacher(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrh/IGhrh_AssessConfigServices.cs b/Tiobon.Core.IServices/Ghrh/IGhrh_AssessConfigServices.cs index ef76d239..21661bf3 100644 --- a/Tiobon.Core.IServices/Ghrh/IGhrh_AssessConfigServices.cs +++ b/Tiobon.Core.IServices/Ghrh/IGhrh_AssessConfigServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 面试评估设定(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrh/IGhrh_ConfigGroupServices.cs b/Tiobon.Core.IServices/Ghrh/IGhrh_ConfigGroupServices.cs index 5d5bcc7e..353e132c 100644 --- a/Tiobon.Core.IServices/Ghrh/IGhrh_ConfigGroupServices.cs +++ b/Tiobon.Core.IServices/Ghrh/IGhrh_ConfigGroupServices.cs @@ -1,8 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 招聘参数配置组(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrh/IGhrh_ConfigServices.cs b/Tiobon.Core.IServices/Ghrh/IGhrh_ConfigServices.cs index c7ea6700..51c82be2 100644 --- a/Tiobon.Core.IServices/Ghrh/IGhrh_ConfigServices.cs +++ b/Tiobon.Core.IServices/Ghrh/IGhrh_ConfigServices.cs @@ -1,8 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 招聘参数配置(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrh/IGhrh_HumanRequestDetailServices.cs b/Tiobon.Core.IServices/Ghrh/IGhrh_HumanRequestDetailServices.cs index b60588c4..a1ba305d 100644 --- a/Tiobon.Core.IServices/Ghrh/IGhrh_HumanRequestDetailServices.cs +++ b/Tiobon.Core.IServices/Ghrh/IGhrh_HumanRequestDetailServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 人力需求维护明细(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrh/IGhrh_HumanRequestServices.cs b/Tiobon.Core.IServices/Ghrh/IGhrh_HumanRequestServices.cs index af3e077b..322e184d 100644 --- a/Tiobon.Core.IServices/Ghrh/IGhrh_HumanRequestServices.cs +++ b/Tiobon.Core.IServices/Ghrh/IGhrh_HumanRequestServices.cs @@ -1,7 +1,4 @@ using Tiobon.Core.Common; -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model; -using Tiobon.Core.Model.Models; namespace Tiobon.Core.IServices; diff --git a/Tiobon.Core.IServices/Ghrh/IGhrh_InterviewAssessDetailServices.cs b/Tiobon.Core.IServices/Ghrh/IGhrh_InterviewAssessDetailServices.cs index ea1c21cf..5d608030 100644 --- a/Tiobon.Core.IServices/Ghrh/IGhrh_InterviewAssessDetailServices.cs +++ b/Tiobon.Core.IServices/Ghrh/IGhrh_InterviewAssessDetailServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 面试单评估明细(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrh/IGhrh_InterviewAssessServices.cs b/Tiobon.Core.IServices/Ghrh/IGhrh_InterviewAssessServices.cs index 4aa28e80..b2937b75 100644 --- a/Tiobon.Core.IServices/Ghrh/IGhrh_InterviewAssessServices.cs +++ b/Tiobon.Core.IServices/Ghrh/IGhrh_InterviewAssessServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 面试单评估(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrh/IGhrh_InterviewLogServices.cs b/Tiobon.Core.IServices/Ghrh/IGhrh_InterviewLogServices.cs index 4ed5227e..0190a5e2 100644 --- a/Tiobon.Core.IServices/Ghrh/IGhrh_InterviewLogServices.cs +++ b/Tiobon.Core.IServices/Ghrh/IGhrh_InterviewLogServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 面试工单日志(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrh/IGhrh_InterviewOrderServices.cs b/Tiobon.Core.IServices/Ghrh/IGhrh_InterviewOrderServices.cs index d0638db4..45e9a2e9 100644 --- a/Tiobon.Core.IServices/Ghrh/IGhrh_InterviewOrderServices.cs +++ b/Tiobon.Core.IServices/Ghrh/IGhrh_InterviewOrderServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 面试工单(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrh/IGhrh_InterviewRecordServices.cs b/Tiobon.Core.IServices/Ghrh/IGhrh_InterviewRecordServices.cs index d929c5bc..0f425c60 100644 --- a/Tiobon.Core.IServices/Ghrh/IGhrh_InterviewRecordServices.cs +++ b/Tiobon.Core.IServices/Ghrh/IGhrh_InterviewRecordServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 面试记录(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrh/IGhrh_OfferApplyOrderSalaryServices.cs b/Tiobon.Core.IServices/Ghrh/IGhrh_OfferApplyOrderSalaryServices.cs index 7644755c..33cbd610 100644 --- a/Tiobon.Core.IServices/Ghrh/IGhrh_OfferApplyOrderSalaryServices.cs +++ b/Tiobon.Core.IServices/Ghrh/IGhrh_OfferApplyOrderSalaryServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 录用审批单薪资(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrh/IGhrh_OfferApplyOrderServices.cs b/Tiobon.Core.IServices/Ghrh/IGhrh_OfferApplyOrderServices.cs index 669e67e1..0f3c09d6 100644 --- a/Tiobon.Core.IServices/Ghrh/IGhrh_OfferApplyOrderServices.cs +++ b/Tiobon.Core.IServices/Ghrh/IGhrh_OfferApplyOrderServices.cs @@ -1,8 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 录用审批单(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeEduBGServices.cs b/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeEduBGServices.cs index f90bfec6..b16e316c 100644 --- a/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeEduBGServices.cs +++ b/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeEduBGServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 教育背景(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeHomeServices.cs b/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeHomeServices.cs index 403e8a56..7ec24802 100644 --- a/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeHomeServices.cs +++ b/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeHomeServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 家庭关系(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeInfoColumnServices.cs b/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeInfoColumnServices.cs index 535980cd..0a0c6edb 100644 --- a/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeInfoColumnServices.cs +++ b/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeInfoColumnServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 简历信息栏位(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeInfoGroupServices.cs b/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeInfoGroupServices.cs index 46aa8cdd..ccd2ab36 100644 --- a/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeInfoGroupServices.cs +++ b/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeInfoGroupServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 简历组别(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeLicenceServices.cs b/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeLicenceServices.cs index 3f5e4204..574907ca 100644 --- a/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeLicenceServices.cs +++ b/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeLicenceServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 证件(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeServices.cs b/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeServices.cs index 0451c292..437e6c77 100644 --- a/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeServices.cs +++ b/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeServices.cs @@ -1,9 +1,5 @@ using Microsoft.AspNetCore.Mvc; -using Newtonsoft.Json.Linq; using Tiobon.Core.Common; -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model; -using Tiobon.Core.Model.Models; using Tiobon.Core.Model.ViewModels.Extend; namespace Tiobon.Core.IServices; diff --git a/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeStatementServices.cs b/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeStatementServices.cs index 1a7f9d05..fdf0da93 100644 --- a/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeStatementServices.cs +++ b/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeStatementServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 简历声明(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeTagServices.cs b/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeTagServices.cs index 4b55a81e..8e79e115 100644 --- a/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeTagServices.cs +++ b/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeTagServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 简历标签(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeTemplateServices.cs b/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeTemplateServices.cs index b3525fd7..b38a82d9 100644 --- a/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeTemplateServices.cs +++ b/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeTemplateServices.cs @@ -1,7 +1,4 @@ using Tiobon.Core.Common; -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model; -using Tiobon.Core.Model.Models; using Tiobon.Core.Model.ViewModels.Extend; namespace Tiobon.Core.IServices; diff --git a/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeTrainingServices.cs b/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeTrainingServices.cs index eff1af67..ec93fdd5 100644 --- a/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeTrainingServices.cs +++ b/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeTrainingServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 简历培训记录(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeWorkExpServices.cs b/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeWorkExpServices.cs index e17b3e60..f0e0a1cc 100644 --- a/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeWorkExpServices.cs +++ b/Tiobon.Core.IServices/Ghrh/IGhrh_ResumeWorkExpServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 工作经历(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrh/IGhrh_StatementServices.cs b/Tiobon.Core.IServices/Ghrh/IGhrh_StatementServices.cs index 2f607c76..f5aed2b6 100644 --- a/Tiobon.Core.IServices/Ghrh/IGhrh_StatementServices.cs +++ b/Tiobon.Core.IServices/Ghrh/IGhrh_StatementServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 声明(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrh/IGhrh_TemplateServices.cs b/Tiobon.Core.IServices/Ghrh/IGhrh_TemplateServices.cs index 3e5c0ee3..6748dfa7 100644 --- a/Tiobon.Core.IServices/Ghrh/IGhrh_TemplateServices.cs +++ b/Tiobon.Core.IServices/Ghrh/IGhrh_TemplateServices.cs @@ -1,8 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 招聘模板(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrh/IGhrh_YearHumanApplyOrderServices.cs b/Tiobon.Core.IServices/Ghrh/IGhrh_YearHumanApplyOrderServices.cs index 9608bdc6..7a34484e 100644 --- a/Tiobon.Core.IServices/Ghrh/IGhrh_YearHumanApplyOrderServices.cs +++ b/Tiobon.Core.IServices/Ghrh/IGhrh_YearHumanApplyOrderServices.cs @@ -1,8 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 年度人力申请(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrh/IGhrh_YearHumanSettingsServices.cs b/Tiobon.Core.IServices/Ghrh/IGhrh_YearHumanSettingsServices.cs index 23158fd1..565290fd 100644 --- a/Tiobon.Core.IServices/Ghrh/IGhrh_YearHumanSettingsServices.cs +++ b/Tiobon.Core.IServices/Ghrh/IGhrh_YearHumanSettingsServices.cs @@ -1,8 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 年度人力配置(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrm/IGhrm_MessageTextServices.cs b/Tiobon.Core.IServices/Ghrm/IGhrm_MessageTextServices.cs index 74198f2c..33d17260 100644 --- a/Tiobon.Core.IServices/Ghrm/IGhrm_MessageTextServices.cs +++ b/Tiobon.Core.IServices/Ghrm/IGhrm_MessageTextServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// Ghrm_MessageText(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrm/IGhrm_MessageUserServices.cs b/Tiobon.Core.IServices/Ghrm/IGhrm_MessageUserServices.cs index 7f720afb..00f30a10 100644 --- a/Tiobon.Core.IServices/Ghrm/IGhrm_MessageUserServices.cs +++ b/Tiobon.Core.IServices/Ghrm/IGhrm_MessageUserServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// Ghrm_MessageUser(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghro/IGhro_DeptServices.cs b/Tiobon.Core.IServices/Ghro/IGhro_DeptServices.cs index 1e272123..058dc929 100644 --- a/Tiobon.Core.IServices/Ghro/IGhro_DeptServices.cs +++ b/Tiobon.Core.IServices/Ghro/IGhro_DeptServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// Ghro_Dept(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrp/IGhrp_PerformanceItemServices.cs b/Tiobon.Core.IServices/Ghrp/IGhrp_PerformanceItemServices.cs index 43e8de4a..6797ec5c 100644 --- a/Tiobon.Core.IServices/Ghrp/IGhrp_PerformanceItemServices.cs +++ b/Tiobon.Core.IServices/Ghrp/IGhrp_PerformanceItemServices.cs @@ -1,12 +1,8 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; +namespace Tiobon.Core.IServices; -namespace Tiobon.Core.IServices -{ - /// - /// 考核指标(自定义服务接口) - /// - public interface IGhrp_PerformanceItemServices :IBaseServices +/// +/// 考核指标(自定义服务接口) +/// +public interface IGhrp_PerformanceItemServices :IBaseServices { - } } \ No newline at end of file diff --git a/Tiobon.Core.IServices/Ghrp/IGhrp_PerformancePeriodServices.cs b/Tiobon.Core.IServices/Ghrp/IGhrp_PerformancePeriodServices.cs index 16569d20..4a76f3b2 100644 --- a/Tiobon.Core.IServices/Ghrp/IGhrp_PerformancePeriodServices.cs +++ b/Tiobon.Core.IServices/Ghrp/IGhrp_PerformancePeriodServices.cs @@ -1,13 +1,8 @@ -using Newtonsoft.Json.Linq; -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices -{ - /// - /// 考核期间(自定义服务接口) - /// +namespace Tiobon.Core.IServices +{ + /// + /// 考核期间(自定义服务接口) + /// public interface IGhrp_PerformancePeriodServices :IBaseServices { Task BatchCreatePeriod(JObject jsonParam); diff --git a/Tiobon.Core.IServices/Ghrp/IGhrp_PerformancePeriodTypeServices.cs b/Tiobon.Core.IServices/Ghrp/IGhrp_PerformancePeriodTypeServices.cs index e1a4582d..ef1073db 100644 --- a/Tiobon.Core.IServices/Ghrp/IGhrp_PerformancePeriodTypeServices.cs +++ b/Tiobon.Core.IServices/Ghrp/IGhrp_PerformancePeriodTypeServices.cs @@ -1,12 +1,8 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices -{ - /// - /// 考核周期类别(自定义服务接口) - /// +namespace Tiobon.Core.IServices +{ + /// + /// 考核周期类别(自定义服务接口) + /// public interface IGhrp_PerformancePeriodTypeServices :IBaseServices { Task>> GetStageItems(string Stage); diff --git a/Tiobon.Core.IServices/Ghrp/IGhrp_PerformanceTemplateServices.cs b/Tiobon.Core.IServices/Ghrp/IGhrp_PerformanceTemplateServices.cs index b4266f1b..768f98eb 100644 --- a/Tiobon.Core.IServices/Ghrp/IGhrp_PerformanceTemplateServices.cs +++ b/Tiobon.Core.IServices/Ghrp/IGhrp_PerformanceTemplateServices.cs @@ -1,11 +1,8 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices -{ - /// - /// 考核模板(自定义服务接口) - /// +namespace Tiobon.Core.IServices +{ + /// + /// 考核模板(自定义服务接口) + /// public interface IGhrp_PerformanceTemplateServices :IBaseServices { } diff --git a/Tiobon.Core.IServices/Ghrs/IGhrs_AttachmentServices.cs b/Tiobon.Core.IServices/Ghrs/IGhrs_AttachmentServices.cs index 4ddcd7e2..8733270a 100644 --- a/Tiobon.Core.IServices/Ghrs/IGhrs_AttachmentServices.cs +++ b/Tiobon.Core.IServices/Ghrs/IGhrs_AttachmentServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// Ghrs_Attachment(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrs/IGhrs_DataRoleDetailServices.cs b/Tiobon.Core.IServices/Ghrs/IGhrs_DataRoleDetailServices.cs index 5d434903..d45c42de 100644 --- a/Tiobon.Core.IServices/Ghrs/IGhrs_DataRoleDetailServices.cs +++ b/Tiobon.Core.IServices/Ghrs/IGhrs_DataRoleDetailServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// Ghrs_DataRoleDetail(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrs/IGhrs_LangKeyServices.cs b/Tiobon.Core.IServices/Ghrs/IGhrs_LangKeyServices.cs index 03e7347e..d95d5527 100644 --- a/Tiobon.Core.IServices/Ghrs/IGhrs_LangKeyServices.cs +++ b/Tiobon.Core.IServices/Ghrs/IGhrs_LangKeyServices.cs @@ -1,8 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// Ghrs_LangKey(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrs/IGhrs_ListCommonSqlServices.cs b/Tiobon.Core.IServices/Ghrs/IGhrs_ListCommonSqlServices.cs index 3c1dadef..16864940 100644 --- a/Tiobon.Core.IServices/Ghrs/IGhrs_ListCommonSqlServices.cs +++ b/Tiobon.Core.IServices/Ghrs/IGhrs_ListCommonSqlServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// Ghrs_ListCommonSql(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrs/IGhrs_MailOutboxServices.cs b/Tiobon.Core.IServices/Ghrs/IGhrs_MailOutboxServices.cs index 040030dd..0e860603 100644 --- a/Tiobon.Core.IServices/Ghrs/IGhrs_MailOutboxServices.cs +++ b/Tiobon.Core.IServices/Ghrs/IGhrs_MailOutboxServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// Ghrs_MailOutbox(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrs/IGhrs_MenuServices.cs b/Tiobon.Core.IServices/Ghrs/IGhrs_MenuServices.cs index e6dad364..77ab9dd9 100644 --- a/Tiobon.Core.IServices/Ghrs/IGhrs_MenuServices.cs +++ b/Tiobon.Core.IServices/Ghrs/IGhrs_MenuServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// Ghrs_Menu(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrs/IGhrs_ParaDetailServices.cs b/Tiobon.Core.IServices/Ghrs/IGhrs_ParaDetailServices.cs index 5fb5a571..0a2ae520 100644 --- a/Tiobon.Core.IServices/Ghrs/IGhrs_ParaDetailServices.cs +++ b/Tiobon.Core.IServices/Ghrs/IGhrs_ParaDetailServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// Ghrs_ParaDetail(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrs/IGhrs_UserServices.cs b/Tiobon.Core.IServices/Ghrs/IGhrs_UserServices.cs index 2b89eb7c..aefd896a 100644 --- a/Tiobon.Core.IServices/Ghrs/IGhrs_UserServices.cs +++ b/Tiobon.Core.IServices/Ghrs/IGhrs_UserServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 系统用户(自定义服务接口) diff --git a/Tiobon.Core.IServices/Ghrz/IGhrz_Shihua_OA_EmploymentServices.cs b/Tiobon.Core.IServices/Ghrz/IGhrz_Shihua_OA_EmploymentServices.cs index fc7cade5..4f74f24f 100644 --- a/Tiobon.Core.IServices/Ghrz/IGhrz_Shihua_OA_EmploymentServices.cs +++ b/Tiobon.Core.IServices/Ghrz/IGhrz_Shihua_OA_EmploymentServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// Ghrz_Shihua_OA_Employment(自定义服务接口) diff --git a/Tiobon.Core.IServices/GlobalUsings.cs b/Tiobon.Core.IServices/GlobalUsings.cs index 93487424..43f84361 100644 --- a/Tiobon.Core.IServices/GlobalUsings.cs +++ b/Tiobon.Core.IServices/GlobalUsings.cs @@ -1,2 +1,4 @@ -global using Tiobon.Core.IServices.BASE; -global using Tiobon.Core.Model.Models; \ No newline at end of file +global using Tiobon.Core.Base.IServices; +global using Tiobon.Core.Model.Models; +global using Newtonsoft.Json.Linq; +global using Tiobon.Core.Model; \ No newline at end of file diff --git a/Tiobon.Core.IServices/ICommonServices.cs b/Tiobon.Core.IServices/ICommonServices.cs index cd3c71b3..0bf5ddcb 100644 --- a/Tiobon.Core.IServices/ICommonServices.cs +++ b/Tiobon.Core.IServices/ICommonServices.cs @@ -1,8 +1,5 @@ using Microsoft.AspNetCore.Http; -using Newtonsoft.Json.Linq; using Tiobon.Core.Common; -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model; namespace Tiobon.Core.IServices; diff --git a/Tiobon.Core.IServices/IDS4Db/IApplicationUserServices.cs b/Tiobon.Core.IServices/IDS4Db/IApplicationUserServices.cs index 6b6b1d4d..b16bd90c 100644 --- a/Tiobon.Core.IServices/IDS4Db/IApplicationUserServices.cs +++ b/Tiobon.Core.IServices/IDS4Db/IApplicationUserServices.cs @@ -1,5 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.IDS4DbModels; +using Tiobon.Core.Model.IDS4DbModels; namespace Tiobon.Core.IServices; diff --git a/Tiobon.Core.IServices/IDepartmentServices.cs b/Tiobon.Core.IServices/IDepartmentServices.cs index 76efd1ee..d163ad18 100644 --- a/Tiobon.Core.IServices/IDepartmentServices.cs +++ b/Tiobon.Core.IServices/IDepartmentServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// IDepartmentServices diff --git a/Tiobon.Core.IServices/IGhra_GradeServices.cs b/Tiobon.Core.IServices/IGhra_GradeServices.cs index 856d83df..88105912 100644 --- a/Tiobon.Core.IServices/IGhra_GradeServices.cs +++ b/Tiobon.Core.IServices/IGhra_GradeServices.cs @@ -1,11 +1,8 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// 年级(自定义服务接口) /// - public interface IGhra_GradeServices :IBaseServices +public interface IGhra_GradeServices :IBaseServices { } \ No newline at end of file diff --git a/Tiobon.Core.IServices/IModuleServices.cs b/Tiobon.Core.IServices/IModuleServices.cs index bdf989b9..ae0192a4 100644 --- a/Tiobon.Core.IServices/IModuleServices.cs +++ b/Tiobon.Core.IServices/IModuleServices.cs @@ -1,12 +1,9 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - namespace Tiobon.Core.IServices; /// /// ModuleServices /// - public interface IModuleServices :IBaseServices +public interface IModuleServices :IBaseServices { diff --git a/Tiobon.Core.IServices/IOperateLogServices.cs b/Tiobon.Core.IServices/IOperateLogServices.cs index ed376d89..647f75b1 100644 --- a/Tiobon.Core.IServices/IOperateLogServices.cs +++ b/Tiobon.Core.IServices/IOperateLogServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// IOperateLogServices diff --git a/Tiobon.Core.IServices/IPasswordLibServices.cs b/Tiobon.Core.IServices/IPasswordLibServices.cs index a6e64f68..ac5d7c43 100644 --- a/Tiobon.Core.IServices/IPasswordLibServices.cs +++ b/Tiobon.Core.IServices/IPasswordLibServices.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; public partial interface IPasswordLibServices :IBaseServices { diff --git a/Tiobon.Core.IServices/IPermissionServices.cs b/Tiobon.Core.IServices/IPermissionServices.cs index 15f86a0a..889fc0f0 100644 --- a/Tiobon.Core.IServices/IPermissionServices.cs +++ b/Tiobon.Core.IServices/IPermissionServices.cs @@ -1,6 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; public partial interface IPermissionServices : IBaseServices { diff --git a/Tiobon.Core.IServices/IReportServices.cs b/Tiobon.Core.IServices/IReportServices.cs index a8d48b37..85f0e78d 100644 --- a/Tiobon.Core.IServices/IReportServices.cs +++ b/Tiobon.Core.IServices/IReportServices.cs @@ -1,7 +1,4 @@ using Tiobon.Core.Common; -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model; -using Tiobon.Core.Model.Models; namespace Tiobon.Core.IServices; diff --git a/Tiobon.Core.IServices/IRoleModulePermissionServices.cs b/Tiobon.Core.IServices/IRoleModulePermissionServices.cs index fd942d16..34c3f53a 100644 --- a/Tiobon.Core.IServices/IRoleModulePermissionServices.cs +++ b/Tiobon.Core.IServices/IRoleModulePermissionServices.cs @@ -1,6 +1,3 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - namespace Tiobon.Core.IServices; /// diff --git a/Tiobon.Core.IServices/IRoleServices.cs b/Tiobon.Core.IServices/IRoleServices.cs index 886f4065..caedba08 100644 --- a/Tiobon.Core.IServices/IRoleServices.cs +++ b/Tiobon.Core.IServices/IRoleServices.cs @@ -1,6 +1,3 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - namespace Tiobon.Core.IServices; /// diff --git a/Tiobon.Core.IServices/ISplitDemoServices.cs b/Tiobon.Core.IServices/ISplitDemoServices.cs index 68b551ae..df9d1c69 100644 --- a/Tiobon.Core.IServices/ISplitDemoServices.cs +++ b/Tiobon.Core.IServices/ISplitDemoServices.cs @@ -1,8 +1,3 @@ - - -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - namespace Tiobon.Core.IServices; /// diff --git a/Tiobon.Core.IServices/ITasksLogServices.cs b/Tiobon.Core.IServices/ITasksLogServices.cs index 9524f38c..f5e53c97 100644 --- a/Tiobon.Core.IServices/ITasksLogServices.cs +++ b/Tiobon.Core.IServices/ITasksLogServices.cs @@ -1,8 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// ITasksLogServices diff --git a/Tiobon.Core.IServices/ITasksQzServices.cs b/Tiobon.Core.IServices/ITasksQzServices.cs index 3ba1e22c..c24d1bfc 100644 --- a/Tiobon.Core.IServices/ITasksQzServices.cs +++ b/Tiobon.Core.IServices/ITasksQzServices.cs @@ -1,8 +1,4 @@ - -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; /// /// ITasksQzServices diff --git a/Tiobon.Core.IServices/ITenantService.cs b/Tiobon.Core.IServices/ITenantService.cs index 3c2a029d..6af63d7c 100644 --- a/Tiobon.Core.IServices/ITenantService.cs +++ b/Tiobon.Core.IServices/ITenantService.cs @@ -1,7 +1,4 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - -namespace Tiobon.Core.IServices; +namespace Tiobon.Core.IServices; public interface ITenantService : IBaseServices { diff --git a/Tiobon.Core.IServices/IUserRoleServices.cs b/Tiobon.Core.IServices/IUserRoleServices.cs index d7f93221..c8138bf2 100644 --- a/Tiobon.Core.IServices/IUserRoleServices.cs +++ b/Tiobon.Core.IServices/IUserRoleServices.cs @@ -1,6 +1,3 @@ -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - namespace Tiobon.Core.IServices; /// diff --git a/Tiobon.Core.IServices/IsysUserInfoServices.cs b/Tiobon.Core.IServices/IsysUserInfoServices.cs index c7633a0c..2563d204 100644 --- a/Tiobon.Core.IServices/IsysUserInfoServices.cs +++ b/Tiobon.Core.IServices/IsysUserInfoServices.cs @@ -1,8 +1,3 @@ - - -using Tiobon.Core.IServices.BASE; -using Tiobon.Core.Model.Models; - namespace Tiobon.Core.IServices; /// diff --git a/Tiobon.Core.IServices/Tiobon.Core.IServices.csproj b/Tiobon.Core.IServices/Tiobon.Core.IServices.csproj index def6c6cf..5a479337 100644 --- a/Tiobon.Core.IServices/Tiobon.Core.IServices.csproj +++ b/Tiobon.Core.IServices/Tiobon.Core.IServices.csproj @@ -17,4 +17,10 @@ + + + ..\Lib\Tiobon.Core.Base.dll + + + diff --git a/Tiobon.Core.Services/BASE/BaseServices.cs b/Tiobon.Core.Services/BASE/BaseServices.cs deleted file mode 100644 index e6ea9ed6..00000000 --- a/Tiobon.Core.Services/BASE/BaseServices.cs +++ /dev/null @@ -1,2322 +0,0 @@ -namespace Tiobon.Core.Services.BASE; - -/// -/// 增删改查基础服务 -/// -/// -/// -/// -/// -public class BaseServices : IBaseServices where TEntity : class, new() -{ - public ICaching _caching; - - public BaseServices(IBaseRepository BaseDal = null, ICaching caching = null) - { - this.BaseDal = BaseDal; - _caching = caching; - } - - //public IBaseRepository baseDal = new BaseRepository(); - public IBaseRepository BaseDal { get; set; } //通过在子类的构造函数中注入,这里是基类,不用构造函数 - - public ISqlSugarClient Db => BaseDal.Db; - public int? LangId => App.User.GetLangId(); - - /// - /// 根据ID查询实体数据是否存在 - /// - /// - /// - public async Task AnyAsync(object objId) - { - var data = await BaseDal.AnyAsync(objId); - return data; - } - - public async Task AnyAsync(Expression> whereExpression) - { - var data = await BaseDal.AnyAsync(whereExpression); - return data; - } - - public virtual async Task QueryById(object objId) - { - var data = new TEntity(); - var dto = Mapper.Map(data).ToANew(); - - var entityInfo = Db.EntityMaintenance.GetEntityInfo(typeof(TEntity)); - - var keyName = entityInfo.Columns.Where(x => x.IsPrimarykey == true).FirstOrDefault()?.DbColumnName ?? "Id"; - - string sql = @$"DECLARE @langId INT = 1,@ID BIGINT = '{objId}'; - SELECT *, - isnull - ((SELECT CASE WHEN @langId = 1 THEN UserName ELSE UserEname END - FROM Ghrs_User kk - WHERE kk.UserId = a.CreateBy), - '') - + ' ' - + [dbo].[FLangKeyToValue] ('GHR_Common_000078', @langId, '于 ') - + ' ' - + CONVERT (NVARCHAR (16), CreateTime, 121) - + ' ' - + [dbo].[FLangKeyToValue] ('GHR_Common_000079', @langId, ' 创建') - CreateDataInfo, - isnull - ((SELECT CASE WHEN @langId = 1 THEN UserName ELSE UserEname END - FROM Ghrs_User kk - WHERE kk.UserId = a.UpdateBy), - '') - + ' ' - + [dbo].[FLangKeyToValue] ('GHR_Common_000078', @langId, '于') - + ' ' - + CONVERT (NVARCHAR (16), UpdateTime, 121) - + ' ' - + [dbo].[FLangKeyToValue] - ('GHR_Common_000080', @langId, ' 最后修改') - UpdateDataInfo - FROM {entityInfo.DbTableName} a - WHERE a.{keyName} = @ID AND IsEnable='1'"; - dto = await Db.Ado.SqlQuerySingleAsync(sql); - return dto; - } - - /// - /// 根据ID查询一条数据 - /// - /// id(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]),如果是联合主键,请使用Where条件 - /// 是否使用缓存 - /// 数据实体 - public async Task QueryById(object objId, bool blnUseCache = false) - { - var data = await BaseDal.QueryById(objId, blnUseCache); - return Mapper.Map(data).ToANew(); - } - - /// - /// 根据ID查询数据 - /// - /// id列表(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]),如果是联合主键,请使用Where条件 - /// 数据实体列表 - public async Task> QueryByIDs(object[] lstIds) - { - var data = await BaseDal.QueryByIDs(lstIds); - return Mapper.Map(data).ToANew>(); - } - - public virtual async Task> QueryForm(QueryForm body) - { - var data = new ServiceFormResult(); - string sql = string.Empty; - var dt = new DataTable(); - - if (body.id != null) - { - Type entityType = typeof(TEntity); - sql = @$"DECLARE @langId INT = '{body.langId}',@ID BIGINT = '{body.id}'; - - SELECT *, - isnull - ((SELECT CASE WHEN @langId = 1 THEN UserName ELSE UserEname END - FROM Ghrs_User kk - WHERE kk.UserId = a.CreateBy), - '') - + ' ' - + [dbo].[FLangKeyToValue] ('GHR_Common_000078', @langId, '于 ') - + ' ' - + CONVERT (NVARCHAR (16), CreateTime, 121) - + ' ' - + [dbo].[FLangKeyToValue] ('GHR_Common_000079', @langId, ' 创建') - CreateDataInfo, - isnull - ((SELECT CASE WHEN @langId = 1 THEN UserName ELSE UserEname END - FROM Ghrs_User kk - WHERE kk.UserId = a.UpdateBy), - '') - + ' ' - + [dbo].[FLangKeyToValue] ('GHR_Common_000078', @langId, '于') - + ' ' - + CONVERT (NVARCHAR (16), UpdateTime, 121) - + ' ' - + [dbo].[FLangKeyToValue] - ('GHR_Common_000080', @langId, ' 最后修改') - UpdateDataInfo - FROM {entityType.GetEntityTableName()} a - WHERE a.Id = @ID"; - data.result.DT_TableDataT1 = await Db.Ado.SqlQueryAsync(sql); - } - else - { - var list = new List - { - new TEntity() - }; - - data.result.DT_TableDataT1 = Mapper.Map(list).ToANew>(); - - } - #region JM_PageFormActionsT1 - dynamic JM_PageFormActionsT1 = new ExpandoObject(); - - //var toolbars = await _caching.GetAsync>(body.menuName + "FormToolbar"); - //if (toolbars == null || (toolbars != null && !toolbars.Any())) - //{ - - // if (toolbars.Any()) - // await _caching.SetAsync(body.menuName + "FormToolbar", toolbars); - //} - sql = @$"SELECT field fnKey, [dbo].[FLangKeyToValue] (mkey, {body.langId}, label) fnTitle, icon - FROM Ghrs_PageSettingEdit - WHERE IsEnable = 1 AND pageNo = '{body.menuName}' AND elementType = 'FnKey'"; - var toolbars = await Db.Ado.SqlQueryAsync(sql); - - JM_PageFormActionsT1.Toolbar = toolbars; - #endregion - - #region JM_TableColumnT1 - dynamic JM_TableColumnT1 = new ExpandoObject(); - var tableColumn = new JArray(); - sql = @$"SELECT field, - [dbo].[FLangKeyToValue] (mkey, {body.langId}, label) - label, - required, - editable, - rowNum, - colNum, - dataType, - elementType, - dbo.FS_GetdataSourceBySet - (dataSource, APIDataSourceType, Ghrs_PageSettingEdit.APIDataSourceID) - dataSource, - defaultHidden, - isPrimaryKey, - isSingleColumn,multipleSelect - FROM Ghrs_PageSettingEdit - WHERE IsEnable = 1 - AND pageNo = '{body.menuName}' - AND elementType NOT IN ('FnKey', 'PageGroup');"; - dt = await Db.Ado.GetDataTableAsync(sql); - - for (int i = 0; i < dt.Rows.Count; i++) - { - JObject item = - new JObject { - new JProperty("field", dt.Rows[i]["field"].ToString()), - new JProperty("label", dt.Rows[i]["label"].ToString()), - new JProperty("required", !string.IsNullOrWhiteSpace(dt.Rows[i]["required"].ToString()) ? Convert.ToBoolean(dt.Rows[i]["required"]) : null), - new JProperty("editable", !string.IsNullOrWhiteSpace(dt.Rows[i]["editable"].ToString()) ? Convert.ToBoolean(dt.Rows[i]["editable"]) : null), - new JProperty("rowNum", !string.IsNullOrWhiteSpace(dt.Rows[i]["rowNum"].ToString()) ? Convert.ToInt32(dt.Rows[i]["rowNum"]) : null), - new JProperty("colNum", !string.IsNullOrWhiteSpace(dt.Rows[i]["colNum"].ToString()) ? Convert.ToInt32(dt.Rows[i]["colNum"]) : null), - new JProperty("dataType", dt.Rows[i]["dataType"].ToString()), - new JProperty("elementType", dt.Rows[i]["elementType"].ToString()), - new JProperty("dataSource", dt.Rows[i]["dataSource"].ToString()), - new JProperty("defaultHidden", dt.Rows[i]["defaultHidden"].ToString()), - new JProperty("isPrimaryKey", !string.IsNullOrWhiteSpace(dt.Rows[i]["isPrimaryKey"].ToString()) ? Convert.ToBoolean(dt.Rows[i]["isPrimaryKey"]) : null), - new JProperty("isSingleColumn", !string.IsNullOrWhiteSpace(dt.Rows[i]["isSingleColumn"].ToString()) ? Convert.ToInt32(dt.Rows[i]["isSingleColumn"]) : null), - new JProperty("multipleSelect", !string.IsNullOrWhiteSpace(dt.Rows[i]["multipleSelect"].ToString()) ? Convert.ToBoolean(dt.Rows[i]["multipleSelect"]) : null) - }; - tableColumn.Add(item); - } - JM_TableColumnT1.TableColumn = tableColumn; - #endregion - - #region JM_PageFormT1 - dynamic JM_PageFormT1 = new ExpandoObject(); - var pageForm = new JArray(); - JObject pageFormItem = new JObject { - new JProperty("disabled", false), - new JProperty("labelAlign", "right"), - new JProperty("labelCol", "{span: 6}"), - new JProperty("labelWidth",120), - new JProperty("layout", "horizontal") - }; - - sql = $@"SELECT [dbo].[FLangKeyToValue] (MKey, {body.langId}, MenuName) pageTitle, - IUDProcedure apiName - FROM Ghrs_Menu - WHERE MenuNo = '{body.menuName}' AND IsEnable = 1"; - dt = await Db.Ado.GetDataTableAsync(sql); - if (dt.Rows.Count > 0) - { - pageFormItem.Add(new JProperty("pageTitle", dt.Rows[0]["pageTitle"].ToString())); - pageFormItem.Add(new JProperty("apiName", dt.Rows[0]["apiName"].ToString())); - } - pageForm.Add(pageFormItem); - JM_PageFormT1.PageForm = pageForm; - #endregion - - #region DT_PageMutiMsg - var DT_PageMutiMsg = await _caching.GetAsync>("DT_PageMutiMsg"); - if (DT_PageMutiMsg == null || (DT_PageMutiMsg != null && !DT_PageMutiMsg.Any())) - { - sql = $@"SELECT Langkey field, - CASE {body.langId} - WHEN 1 THEN isnull (Value01, LangValue) - WHEN 2 THEN isnull (Value02, LangValue) - WHEN 3 THEN isnull (Value03, LangValue) - WHEN 4 THEN isnull (Value04, LangValue) - WHEN 5 THEN isnull (Value05, LangValue) - WHEN 6 THEN isnull (Value06, LangValue) - WHEN 7 THEN isnull (Value07, LangValue) - WHEN 8 THEN isnull (Value08, LangValue) - WHEN 9 THEN isnull (Value09, LangValue) - WHEN 10 THEN isnull (Value10, LangValue) - END label - FROM Ghrs_LangKey - WHERE (LangKey LIKE 'GHR_Page%' OR LangKey LIKE 'GHR_Common%') - AND IsEnable = 1"; - DT_PageMutiMsg = Db.Ado.SqlQuery(sql); - if (DT_PageMutiMsg.Any()) - await _caching.SetAsync("DT_PageMutiMsg", DT_PageMutiMsg); - } - #endregion - - data.result.JM_PageFormActionsT1 = JM_PageFormActionsT1; - data.result.JM_TableColumnT1 = JM_TableColumnT1; - data.result.JM_PageFormT1 = JM_PageFormT1; - data.result.DT_PageMutiMsg = DT_PageMutiMsg; - return data; - } - - #region 新增 - - /// - /// 写入实体数据 - /// - /// 实体类 - /// - public virtual async Task Add(TInsertDto entity) - { - var entity1 = Mapper.Map(entity).ToANew(); - if (UserContext.Context != null) - { - HttpRequest request = UserContext.Context.Request; - var api = request.Path.ObjToString().TrimEnd('/').ToLower(); - var ip = GetUserIp(UserContext.Context); - - BasePoco ent = entity1 as BasePoco; - - ent.CreateIP = ip; - ent.CreateProg = api; - } - - - #region 检查是否存在相同值 - CheckOnly(entity1); - #endregion - - return await BaseDal.Add(entity1); - } - - /// - /// 批量插入实体(速度快) - /// - /// 实体集合 - /// 影响行数 - public virtual async Task> Add(List listEntity) - { - if (listEntity != null && listEntity.Any()) - { - var userId = App.User.ID; - var api = string.Empty; - var ip = string.Empty; - if (UserContext.Context != null) - { - HttpRequest request = UserContext.Context.Request; - api = request.Path.ObjToString().TrimEnd('/').ToLower(); - ip = GetUserIp(UserContext.Context); - } - - - var list = new List(); - - foreach (var item in listEntity) - { - var entity = new TEntity(); - ConvertTInsertDto2TEntity(item, entity); - list.Add(entity); - } - - //var list = Mapper.Map(listEntity).ToANew>(); - list.ForEach(entity => - { - BasePoco ent = entity as BasePoco; - ent.CreateIP = ip; - ent.CreateProg = api; - - - #region 检查是否存在相同值 - CheckOnly(entity); - #endregion - }); - return await BaseDal.Add(list); - } - else return default; - } - #endregion - - /// - /// 更新实体数据 - /// - /// 实体类 - /// - public virtual async Task Update(long Id, TEditDto editModel) - { - HttpRequest request = UserContext.Context.Request; - var api = request.Path.ObjToString().TrimEnd('/').ToLower(); - var ip = GetUserIp(UserContext.Context); - - if (editModel == null || !await BaseDal.AnyAsync(Id)) - return false; - - var entity = await BaseDal.QueryById(Id); - ConvertTEditDto2TEntity(editModel, entity); - BasePoco ent = entity as BasePoco; - ent.UpdateIP = ip; - ent.UpdateProg = api; - CheckOnly(entity, Id); - return await BaseDal.Update(entity); - } - public virtual async Task Update(long Id, TEditDto editModel, List lstColumns = null, List lstIgnoreColumns = null, string where = "") - { - HttpRequest request = UserContext.Context.Request; - var api = request.Path.ObjToString().TrimEnd('/').ToLower(); - var ip = GetUserIp(UserContext.Context); - - if (editModel == null || !await BaseDal.AnyAsync(Id)) - return false; - - var entity = await BaseDal.QueryById(Id); - ConvertTEditDto2TEntity(editModel, entity); - BasePoco ent = entity as BasePoco; - ent.UpdateIP = ip; - ent.UpdateProg = api; - CheckOnly(entity, Id); - return await BaseDal.Update(entity, lstColumns, lstIgnoreColumns, where); - } - public async Task Update(Dictionary editModels) - { - HttpRequest request = UserContext.Context.Request; - var api = request.Path.ObjToString().TrimEnd('/').ToLower(); - var ip = GetUserIp(UserContext.Context); - - List entities = new List(); - foreach (var keyValuePairs in editModels) - { - if (keyValuePairs.Value == null || !BaseDal.Any(keyValuePairs.Key)) - continue; - - var entity = await BaseDal.QueryById(keyValuePairs.Key); - - ConvertTEditDto2TEntity(keyValuePairs.Value, entity); - BasePoco ent = entity as BasePoco; - ent.UpdateIP = ip; - ent.UpdateProg = api; - CheckOnly(entity, keyValuePairs.Key); - entities.Add(entity); - } - - return await BaseDal.Update(entities); - } - /// - /// 更新实体数据 - /// - /// 实体类 - /// - public async Task Update(List listEntity) - { - HttpRequest request = UserContext.Context.Request; - var api = request.Path.ObjToString().TrimEnd('/').ToLower(); - var ip = GetUserIp(UserContext.Context); - listEntity.ForEach(entity => - { - BasePoco ent = entity as BasePoco; - ent.UpdateIP = ip; - ent.UpdateProg = api; - }); - return await BaseDal.Update(listEntity); - } - - public async Task Update(TEntity entity, string where) - { - HttpRequest request = UserContext.Context.Request; - var api = request.Path.ObjToString().TrimEnd('/').ToLower(); - var ip = GetUserIp(UserContext.Context); - BasePoco ent = entity as BasePoco; - ent.UpdateIP = ip; - ent.UpdateProg = api; - return await BaseDal.Update(entity, where); - } - - public async Task Update(object operateAnonymousObjects) - { - return await BaseDal.Update(operateAnonymousObjects); - } - - public async Task Update(TEntity entity, List lstColumns = null, List lstIgnoreColumns = null, string where = "") - { - return await BaseDal.Update(entity, lstColumns, lstIgnoreColumns, where); - } - public async Task Update(List entitys, List lstColumns = null, List lstIgnoreColumns = null, string where = "") - { - return await BaseDal.Update(entitys, lstColumns, lstIgnoreColumns, where); - } - - - /// - /// 根据实体删除一条数据 - /// - /// 实体类 - /// - public async Task Delete(TEntity entity) - { - return await BaseDal.Delete(entity); - } - - /// - /// 删除指定ID的数据 - /// - /// 主键ID - /// - public async Task DeleteById(object id) - { - return await BaseDal.DeleteById(id); - } - - /// - /// 删除指定ID的数据 - /// - /// 主键ID - /// - public virtual async Task DeleteById1(object id) - { - var entity = await BaseDal.QueryById(id); - BasePoco ent = entity as BasePoco; - ent.IsEnable = 0; - return await BaseDal.Update(entity); - } - - /// - /// 删除指定ID集合的数据(批量删除) - /// - /// 主键ID集合 - /// - public async Task DeleteByIds(object[] ids) - { - return await BaseDal.DeleteByIds(ids); - } - /// - /// 删除指定ID集合的数据(批量删除) - /// - /// 主键ID集合 - /// - public virtual async Task DeleteByIds1(long[] ids) - { - HttpRequest request = UserContext.Context.Request; - var api = request.Path.ObjToString().TrimEnd('/').ToLower(); - var ip = GetUserIp(UserContext.Context); - - List entities = new List(); - foreach (var id in ids) - { - if (id == null || !BaseDal.Any(id)) - continue; - - var entity = await BaseDal.QueryById(id); - - BasePoco ent = entity as BasePoco; - ent.UpdateIP = ip; - ent.UpdateProg = api; - ent.IsEnable = 0; - entities.Add(entity); - } - - return await BaseDal.Update(entities); - } - - /// - /// 根据表达式,删除实体 - /// - /// 表达式 - /// - public async Task Delete(Expression> whereExpression) - { - return await BaseDal.Delete(whereExpression); - } - - /// - /// 查询所有数据 - /// - /// 数据列表 - public async Task> Query() - { - return await BaseDal.Query(); - } - - /// - /// 查询数据列表 - /// - /// 条件 - /// 数据列表 - public async Task> Query(string where) - { - return await BaseDal.Query(where); - } - - /// - /// 查询数据列表 - /// - /// whereExpression - /// 数据列表 - public async Task> Query(Expression> whereExpression) - { - return await BaseDal.Query(whereExpression); - } - - public virtual async Task> QueryDto(Expression> whereExpression) - { - var data = await BaseDal.Query(whereExpression); - return Mapper.Map(data).ToANew>(); - } - public virtual async Task QuerySingle(object objId) - { - var entity = await BaseDal.QueryById(objId); - return entity; - } - public async Task QuerySingle(Expression> whereExpression) - { - var entitys = await BaseDal.Query(whereExpression); - var entity = entitys.FirstOrDefault(); - if (entity == null) - return default; - else return entity; - } - public virtual async Task QuerySingleDto(Expression> whereExpression) - { - var entity = await QuerySingle(whereExpression); - if (entity == null) - return default; - else return Mapper.Map(entity).ToANew(); - } - - /// - /// 按照特定列查询数据列表 - /// - /// - /// - /// - public async Task> Query(Expression> expression) - { - return await BaseDal.Query(expression); - } - - /// - /// 按照特定列查询数据列表带条件排序 - /// - /// - /// 过滤条件 - /// 查询实体条件 - /// 排序条件 - /// - public async Task> Query(Expression> expression, Expression> whereExpression, string orderByFileds) - { - return await BaseDal.Query(expression, whereExpression, orderByFileds); - } - - /// - /// 查询一个列表 - /// - /// 条件表达式 - /// 排序字段,如name asc,age desc - /// 数据列表 - public async Task> Query(Expression> whereExpression, Expression> orderByExpression, bool isAsc = true) - { - return await BaseDal.Query(whereExpression, orderByExpression, isAsc); - } - - public async Task> Query(Expression> whereExpression, string orderByFileds) - { - return await BaseDal.Query(whereExpression, orderByFileds); - } - - /// - /// 查询一个列表 - /// - /// 条件 - /// 排序字段,如name asc,age desc - /// 数据列表 - public async Task> Query(string where, string orderByFileds) - { - return await BaseDal.Query(where, orderByFileds); - } - - /// - /// 根据sql语句查询 - /// - /// 完整的sql语句 - /// 参数 - /// 泛型集合 - public async Task> QuerySql(string sql, SugarParameter[] parameters = null) - { - return await BaseDal.QuerySql(sql, parameters); - } - - /// - /// 根据sql语句查询 - /// - /// 完整的sql语句 - /// 参数 - /// DataTable - public async Task QueryTable(string sql, SugarParameter[] parameters = null) - { - return await BaseDal.QueryTable(sql, parameters); - } - - /// - /// 查询前N条数据 - /// - /// 条件表达式 - /// 前N条 - /// 排序字段,如name asc,age desc - /// 数据列表 - public async Task> Query(Expression> whereExpression, int top, string orderByFileds) - { - return await BaseDal.Query(whereExpression, top, orderByFileds); - } - - /// - /// 查询前N条数据 - /// - /// 条件 - /// 前N条 - /// 排序字段,如name asc,age desc - /// 数据列表 - public async Task> Query(string where, int top, string orderByFileds) - { - return await BaseDal.Query(where, top, orderByFileds); - } - - /// - /// 分页查询 - /// - /// 条件表达式 - /// 页码(下标0) - /// 页大小 - /// 排序字段,如name asc,age desc - /// 数据列表 - public async Task> Query(Expression> whereExpression, int pageIndex, int pageSize, string orderByFileds) - { - return await BaseDal.Query(whereExpression, pageIndex, pageSize, orderByFileds); - } - - /// - /// 分页查询 - /// - /// 条件 - /// 页码(下标0) - /// 页大小 - /// 排序字段,如name asc,age desc - /// 数据列表 - public async Task> Query(string where, int pageIndex, int pageSize, string orderByFileds) - { - return await BaseDal.Query(where, pageIndex, pageSize, orderByFileds); - } - - public async Task> QueryPage(Expression> whereExpression, int pageIndex = 1, int pageSize = 20, string orderByFileds = null) - { - return await BaseDal.QueryPage(whereExpression, pageIndex, pageSize, orderByFileds); - } - - public virtual async Task> QueryFilterPage(QueryBody filter) - { - return await QueryFilterPage(filter, null); - } - public virtual async Task> QueryFilterPage(QueryBody filter, string condition, bool? IsEnable = true) - { - if (string.IsNullOrWhiteSpace(filter.orderBy)) - filter.orderBy = "CreateTime1 DESC"; - - if (filter.pageSize == 0) - filter.pageSize = 10000; - - Type entityType = typeof(TEntity); - var properties = entityType.GetGenericProperties(); - - var countSql = @$" SELECT COUNT(1) FROM {entityType.GetEntityTableName()} A"; - var sql1 = @$"DECLARE @langId INT = {filter.langId};"; - var sql = @$" SELECT A.*, - ISNULL ((SELECT CASE WHEN @langId = 1 THEN UserName ELSE UserEname END - FROM Ghrs_User B - WHERE B.UserId = A.CreateBy), - '') CreateDataInfo, - ISNULL ((SELECT CASE WHEN @langId = 1 THEN UserName ELSE UserEname END - FROM Ghrs_User B - WHERE B.UserId = A.UpdateBy), - '') UpdateDataInfo, ISNULL(A.UpdateTime, A.CreateTime) CreateTime1 - FROM {entityType.GetEntityTableName()} A"; - string conditions = " WHERE 1=1 "; - - if (properties.Any(x => x.Name == "DataBelongID")) - conditions += $" AND dbo.FUserDataBelongPriv ({App.User.ID}, A.DataBelongID, NULL) = 1"; - - if (IsEnable == true) - conditions += " AND IsEnable = 1"; - else if (IsEnable == false) - conditions += " AND IsEnable = 0"; - - if (!string.IsNullOrWhiteSpace(condition)) - conditions += " AND " + condition; - - - if (filter.jsonParam != null) - foreach (JProperty jProperty in filter.jsonParam.Properties()) - { - var name = jProperty.Name; - var value = jProperty.Value.ToString(); - if (name == "page" || name == "pageSize" || !properties.Any(x => x.Name == name)) - continue; - if (!string.IsNullOrWhiteSpace(value)) - conditions = DealConditions(conditions, name, value); - } - - sql += conditions; - countSql += conditions; - int total = await Db.Ado.GetIntAsync(countSql); - - sql = "SELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY " + filter.orderBy + ") NUM FROM (SELECT * FROM (" + sql + " "; - sql += ") A ) B ) C"; - - sql += " WHERE NUM <= " + filter.pageNum * filter.pageSize + " AND NUM >" + (filter.pageNum - 1) * filter.pageSize; - sql = sql1 + sql; - var entitys = await Db.Ado.SqlQueryAsync(sql); - - if (entitys != null) - { - var dyDataBelongID = entityType.GetProperty("DataBelongID"); - var entityTypeDto = typeof(TEntityDto); - var propertieDtos = entityTypeDto.GetGenericProperties(); - if (propertieDtos.Any(x => x.Name == "DataBelongName")) - for (int i = 0; i < entitys.Count; i++) - { - var dataBelongID = dyDataBelongID.GetValue(entitys[i]); - if (dataBelongID != null) - { - var propertie = entityTypeDto.GetProperty("DataBelongName"); - propertie.SetValue(entitys[i], await GetDataBelongName(dataBelongID.ObjToInt())); - } - } - } - - return new ServicePageResult(filter.pageNum, total, filter.pageSize, entitys); - - } - public virtual async Task> ExportExcel(QueryExport body) - { - QueryBody filter = new QueryBody(); - filter.pageNum = 1; - filter.jsonParam = body.jsonParam; - filter.pageSize = 1000000; - filter.langId = body.langId; - - var condition = "1=1"; - if (body.exportSet.SelectRowKeys != null && body.exportSet.SelectRowKeys.Any()) - condition += $" AND Id IN({string.Join(",", body.exportSet.SelectRowKeys)})"; - - var data = await QueryFilterPage(filter, condition, true); - - string sql = $@"SELECT * - FROM Ghrs_PageSettingQuery - WHERE IsEnable = 1 - AND PageNo = '{body.menuName}' - AND (defaultHidden = 'false' OR defaultHidden is null OR defaultHidden ='') - ORDER BY SortNo ASC"; - - var columns = DbAccess.QueryList(sql); - - var fieldDescs = new Dictionary(); - if (body.exportSet.ExFields.Any()) - body.exportSet.ExFields.ForEach(x => - { - if (columns.Any(o => o.field == x)) - { - var label = columns.FirstOrDefault(o => o.field == x)?.label; - if (!fieldDescs.ContainsKey(x)) - fieldDescs.Add(x, label); - - } - }); - else - fieldDescs = columns.ToDictionary(item => item.field, item => item.label); - var dt = ToDataTable(data.result.DT_TableDataT1, fieldDescs, null); - // 获取所有列名 - var dtColumns = dt.Columns; - - var id = SnowFlakeSingle.instance.getID(); - var physicsPath = $"{Environment.CurrentDirectory}{Path.DirectorySeparatorChar}wwwroot"; - var path = $"{$"{Path.DirectorySeparatorChar}files{Path.DirectorySeparatorChar}export{Path.DirectorySeparatorChar}{id}{Path.DirectorySeparatorChar}"}"; - if (!Directory.Exists(physicsPath + path)) - Directory.CreateDirectory(physicsPath + path); - - path = path + body.exportSet.TitleName + ".xlsx"; - NPOIHelper.ExportExcel(dt, body.exportSet.TitleName, "sheet1", physicsPath + path); - - var result = new ExcelData(); - result.filePath = "/Advanced" + path; - result.fileName = body.exportSet.TitleName + ".xlsx"; - return ServiceResult.OprateSuccess("导出成功", result); - } - /// - /// 列名按照前端显示顺序导出 - /// - /// - /// - /// - public static (List, List) Sort(Dictionary columns, List ExportFields) - { - List fields = new List(); - List colunms = new List(); - if (ExportFields == null || ExportFields.Count == 0) - { - return (columns.Keys.ToList(), columns.Values.ToList()); - } - - foreach (var field in ExportFields) - { - foreach (var item in columns) - { - if (item.Key == field) - { - fields.Add(item.Key); - colunms.Add(item.Value); - } - } - } - - return (fields, colunms); - } - public static DataTable ToDataTable(List list, Dictionary fieldDescs = null, params string[] propertyName) - { - var (fields, colunms) = Sort(fieldDescs, null); - - List propertyNameList = new List(); - if (propertyName != null) - { - propertyNameList.AddRange(propertyName); - } - DataTable result = new DataTable(); - if (list.Count > 0) - { - PropertyInfo[] propertys = list[0].GetType().GetProperties(); - for (int i = 0; i < fields.Count; i++) - { - foreach (PropertyInfo pi in propertys) - { - if (propertyNameList.Count == 0) - { - //if (DBNull.Value.Equals(pi.PropertyType)) - //{ - // // pi.PropertyType = DateTime; - //} - Type colType = pi.PropertyType; - if (colType.IsGenericType && colType.GetGenericTypeDefinition() == typeof(Nullable<>)) - { - colType = colType.GetGenericArguments()[0]; - } - if (fields[i] == pi.Name) - { - result.Columns.Add(colunms[i], colType); - } - //result.Columns.Add(pi.Name, pi.PropertyType); - } - else - { - if (propertyNameList.Contains(pi.Name)) - { - if (fields[i] == pi.Name) - result.Columns.Add(fields[i], pi.PropertyType); - } - } - } - } - for (int i = 0; i < list.Count; i++) - { - ArrayList tempList = new ArrayList(); - for (int j = 0; j < fields.Count; j++) - { - foreach (PropertyInfo pi in propertys) - { - if (fields[j] == pi.Name) - { - if (propertyNameList.Count == 0) - { - object obj = pi.GetValue(list[i], null); - tempList.Add(obj); - } - else - { - if (propertyNameList.Contains(pi.Name)) - { - object obj = pi.GetValue(list[i], null); - tempList.Add(obj); - } - } - } - } - } - object[] array = tempList.ToArray(); - - try - { - result.LoadDataRow(array, true); - } - catch (Exception E) - { - - } - - } - } - return result; - } - public virtual async Task> ImportExcel(IFormFile file, string menuName = null, long? MasterId = null) - { - var data = new ExcelData(); - var (path, filepath) = await ReportHelper.GetImportFilePath(file, menuName); - var id1 = SnowFlakeSingle.instance.getID(); - string errorFileName = path + SnowFlakeSingle.instance.getID() + FileHelper.GetPostfixStr(filepath); - - var dt = ReportHelper.ReadImportExcel(filepath); - var columns = await QueryExportColumn(menuName); - - var (dictList, errorCount) = await ReportHelper.ValidImportExcel(Db, columns, dt); - - if (errorCount > 0) - { - NPOIHelper.ExportExcel(dt, null, "导入数据", FileHelper.GetPhysicsPath() + errorFileName); - data.filePath = "/Advanced" + errorFileName; - data.ErrorCount = errorCount; - } - else - { - Type entityType = typeof(TEntity); - await Db.Insertable(dictList).AS(entityType.GetEntityTableName()).ExecuteCommandAsync(); - data.SuccessCount = dictList.Count; - } - - return ServiceResult.OprateSuccess("导入成功!", data); - } - public async Task> QueryExportColumn(string menuName) - { - var sql = $@"SELECT Row_Number () - OVER (ORDER BY CONVERT (INT, rowNum), CONVERT (INT, colNum)) - sortNum, - field, - [dbo].[FLangKeyToValue] (mkey, 1, label) - label, - dbo.FS_GetdataSourceBySet - (dataSource, APIDataSourceType, Ghrs_PageSettingEdit.APIDataSourceID) - dataSource, - APIDataSourceType - dataSourceType, - required, - dataType, - CONVERT (NVARCHAR (1000), '') - commentText -- StaffWith - , - elementType - + CASE WHEN multipleSelect = 'true' THEN '_multiple' ELSE '' END - elementType, - APIDataSourceID - dataSourceId, - CASE - WHEN elementType = 'YearMonthPicker' AND required = 'true' - THEN - '必填;输入年月,如(2024-01),不是年月日' - WHEN elementType = 'YearMonthPicker' - THEN - '输入年月,如(2024-01),不是年月日' - WHEN required = 'true' - THEN - '必填' - WHEN required = 'true' AND dataType = 'int' - THEN - '必填且输入整数' - WHEN required = 'true' AND dataType = 'decimal' - THEN - '必填且输入整数' - WHEN required = 'false' AND dataType = 'int' - THEN - '输入整数' - WHEN elementType = 'GDatePicker' - THEN - '输入日期' - ELSE - NULL - END - Comment - FROM Ghrs_PageSettingEdit - WHERE IsEnable = 1 - AND elementType NOT IN ('FnKey', 'PageGroup') - AND pageNo = '{menuName}' - --and editable = 'true' - AND defaultHidden ! = 'true' - AND elementType ! = 'FileUpload' - AND dataType ! = ''"; - - return await Db.Ado.SqlQueryAsync(sql); - } - - public virtual async Task> DownloadExcel(string menuName) - { - - var tableNmae = string.Empty; - Type entityType = typeof(TEntity); - var columns = await QueryExportColumn(menuName); - - var dt = await Db.Ado.GetDataTableAsync("SELECT TOP 1 * FROM " + entityType.GetEntityTableName() + " WHERE IsEnable=1"); - - var MenuName = await Db.Ado.GetStringAsync($"SELECT MenuName FROM Ghrs_Menu WHERE MenuNo = '{menuName}'"); - //columns = columns.WhereIF(param.exportSet.ExFields.Any(), x => param.exportSet.ExFields.Contains(x.field)).ToList(); - - var path = ReportHelper.ImportTemplate(Db, columns, dt, menuName); - var result = ServiceResult.OprateSuccess($"{MenuName}_{DateTimeHelper.ConvertToSecondString1(DateTime.Now)}.xlsx", path); - return result; - } - - public async Task> QueryMuch(Expression> joinExpression, Expression> selectExpression, Expression> whereLambda = null) where T : class, new() - { - return await BaseDal.QueryMuch(joinExpression, selectExpression, whereLambda); - } - - public async Task> QueryPage(PaginationModel pagination) - { - var express = DynamicLinqFactory.CreateLambda(pagination.Conditions); - return await QueryPage(express, pagination.PageIndex, pagination.PageSize, pagination.OrderByFileds); - } - - #region 分表 - - public async Task> AddSplit(TEntity entity) - { - return await BaseDal.AddSplit(entity); - } - - public async Task UpdateSplit(TEntity entity, DateTime dateTime) - { - return await BaseDal.UpdateSplit(entity, dateTime); - } - - /// - /// 根据实体删除一条数据 - /// - /// 实体类 - /// - public async Task DeleteSplit(TEntity entity, DateTime dateTime) - { - return await BaseDal.DeleteSplit(entity, dateTime); - } - - public async Task QueryByIdSplit(object objId) - { - return await BaseDal.QueryByIdSplit(objId); - } - - public async Task> QueryPageSplit(Expression> whereExpression, DateTime beginTime, DateTime endTime, int pageIndex = 1, int pageSize = 20, string orderByFields = null) - { - return await BaseDal.QueryPageSplit(whereExpression, beginTime, endTime, pageIndex, pageSize, orderByFields); - } - - #endregion - - public static string GetUserIp(HttpContext context) - { - string realIP = null; - string forwarded = null; - string remoteIpAddress = context.Connection.RemoteIpAddress.ToString(); - if (context.Request.Headers.ContainsKey("X-Real-IP")) - { - realIP = context.Request.Headers["X-Real-IP"].ToString(); - if (realIP != remoteIpAddress) - { - remoteIpAddress = realIP; - } - } - if (context.Request.Headers.ContainsKey("X-Forwarded-For")) - { - forwarded = context.Request.Headers["X-Forwarded-For"].ToString(); - if (forwarded != remoteIpAddress) - { - remoteIpAddress = forwarded; - } - } - remoteIpAddress = remoteIpAddress.Replace("::ffff:", null); - return remoteIpAddress; - } - - - #region 辅助方法 - /// - /// 转换TEditDto2TEntity - /// - /// - /// - /// - protected void ConvertTEditDto2TEntity(TEditDto source, TEntity dest) - { - foreach (System.Reflection.PropertyInfo mItem in typeof(TEditDto).GetProperties()) - { - if (dest.HasField(mItem.Name)) - dest.SetValueForField(mItem.Name, mItem.GetValue(source, null)); - } - //dest.SetValueForField(DbConsts.ColunmName_LastModificationTime, DateTimeHelper.Now()); - //if (_currentUserId != default) - //{ - // //dest.SetValueForField(DbConsts.ColunmName_LastModifierId, _currentUserId); - // dest.SetValueForField(DbConsts.ColunmName_LastModifier, _currentUserName); - //} - - //if (_currentTenantId != null) - //{ - // dest.SetValueForField(DbConsts.ColunmName_TenantId, _currentTenantId); - //} - } - protected void ConvertTInsertDto2TEntity(TInsertDto source, TEntity dest) - { - foreach (System.Reflection.PropertyInfo mItem in typeof(TEditDto).GetProperties()) - { - if (dest.HasField(mItem.Name)) - dest.SetValueForField(mItem.Name, mItem.GetValue(source, null)); - } - //dest.SetValueForField(DbConsts.ColunmName_LastModificationTime, DateTimeHelper.Now()); - //if (_currentUserId != default) - //{ - // //dest.SetValueForField(DbConsts.ColunmName_LastModifierId, _currentUserId); - // dest.SetValueForField(DbConsts.ColunmName_LastModifier, _currentUserName); - //} - - //if (_currentTenantId != null) - //{ - // dest.SetValueForField(DbConsts.ColunmName_TenantId, _currentTenantId); - //} - } - - #region 检查表中是否已经存在相同代码的数据 - - public static void CheckOnly(TEntity entity, long? id = null) - { - Type entityType = typeof(TEntity); - var tableName = entityType.GetEntityTableName(); - - var names = new List(); - var values = new List(); - var descriptions = new List(); - entity.GetOnlyList(out names, out values, out descriptions); - for (int i = 0; i < names.Count; i++) - { - CheckCodeExist(tableName, names[i], values[i], id != null ? ModifyType.Edit : ModifyType.Add, descriptions[i], id); - } - } - /// - /// 检查表中是否已经存在相同代码的数据 - /// - /// 表名 - /// 字段名 - /// 字段值 - /// ModifyType.Add,ModifyType.Edit - /// ModifyType.Edit时修改记录的ROW_ID值 - /// 判断栏位的提示名称 - public static void CheckCodeExist(string tableName, string fieldName, object fieldValue, ModifyType modifyType, string promptName, long? rowid = null, string whereCondition = null) - { - try - { - CheckCodeExist(tableName, fieldName, fieldValue, modifyType, rowid, promptName, whereCondition); - } - catch (Exception) - { - throw; - } - } - - /// - /// 检查表中是否已经存在相同代码的数据 - /// - /// 表名 - /// 字段名 - /// 字段值 - /// 条件 - /// ModifyType.Add,ModifyType.Edit - /// ModifyType.Edit时修改记录的ROW_ID值 - /// 判断栏位的提示名称 - /// Where后的条件,如:IS_ALCON='Y' - public static bool CheckCodeExist(string tableName, string fieldName, object fieldValue, ModifyType modifyType, long? rowid, string promptName, string whereCondition) - { - try - { - bool result = false; - if (modifyType == ModifyType.Add) - { - string sql = string.Empty; - sql = "SELECT COUNT(*) FROM " + tableName + " WHERE " + fieldName + "='" + fieldValue + "' AND IsEnable=1"; - - if (!string.IsNullOrEmpty(whereCondition)) - sql += " AND " + whereCondition; - - int count = Convert.ToInt32(DbAccess.ExecuteScalar(sql)); - if (count > 0) - { - result = true; - throw new Exception(string.Format("{0}【{1}】已经存在!", promptName, fieldValue)); - } - else - result = false; - - } - else if (modifyType == ModifyType.Edit) - { - string sql = string.Empty; - sql = "SELECT COUNT(*) FROM " + tableName + " WHERE " + fieldName + "='" + fieldValue + "' AND IsEnable=1 AND ID!='" + rowid.Value + "'"; - - if (!string.IsNullOrEmpty(whereCondition)) - sql += " AND " + whereCondition; - - int count = Convert.ToInt32(DbAccess.ExecuteScalar(sql)); - if (count > 0) - { - result = true; - throw new Exception(string.Format("{0}【{1}】已经存在!", promptName, fieldValue)); - } - else - result = false; - } - return result; - } - catch (Exception) - { - throw; - } - } - #endregion - - #region 自动编号 - /// - /// 自动编号 - /// - /// 表名 - /// 栏位名 - /// 前缀 - /// - public async Task GenerateContinuousSequence(string tableCode, string columnCode, string prefixTemp, int length = 7, int tempLength = 6) - { - try - { - string result = string.Empty; - int sequence; - - #region 查询 - DbSelect dbSelect = new(tableCode + " A", "A", null); - dbSelect.IsInitDefaultValue = false; - - if (!string.IsNullOrEmpty(prefixTemp)) - dbSelect.Select("MAX(SUBSTRING(A." + columnCode + "," + (prefixTemp.Length + 1).ToString() + "," + tempLength.ToString() + "))"); - else - dbSelect.Select("MAX(A." + columnCode + ")"); - //} - //dbSelect.Select("MAX(CONVERT(DECIMAL,SUBSTRING(A.ISSUE_NO," + (prefix.Length + dateString.Length + 1).ToString() + "," + tempLength.ToString() + ")))"); - if (!string.IsNullOrEmpty(prefixTemp)) - dbSelect.Where("SUBSTRING(A." + columnCode + ",1," + (prefixTemp.Length).ToString() + ")", " = ", prefixTemp); - dbSelect.Where("LEN(A." + columnCode + ")", "=", length); - string sql = dbSelect.GetSql(); - //await Db.Ado.GetScalarAsync(sql) - string maxSequence = Convert.ToString(await Db.Ado.GetScalarAsync(sql)); - #endregion - //tempLength = tempLength - dateString.Length; - if (string.IsNullOrEmpty(maxSequence)) - result = prefixTemp + Convert.ToString(1).PadLeft(tempLength, '0'); - else - { - if (!string.IsNullOrEmpty(prefixTemp)) - { - if (int.TryParse(maxSequence, out sequence)) - { - sequence += 1; - if (sequence.ToString().Length > tempLength) - throw new Exception("自动生成字串长度已经超过设定长度!"); - } - else - throw new Exception("表中的数据无法进行自动编号,请联系软件开发商!"); - result = prefixTemp + sequence.ToString().PadLeft(tempLength, '0'); - } - else - { - if (int.TryParse(maxSequence, out sequence)) - { - sequence += 1; - if (sequence.ToString().Length > length) - throw new Exception("自动生成字串长度已经超过设定长度!"); - } - else - throw new Exception("表中的数据无法进行自动编号,请联系软件开发商!"); - result = sequence.ToString().PadLeft(length, '0'); - } - } - return result; - } - catch (Exception) { throw; } - } - #endregion - - #region 获取通用参数设定 - public async Task GetParaLabel(string key, string value) - { - string label = value; - - if (value.IsNullOrEmpty()) - return null; - var list = await _caching.GetAsync>(key); - if (list == null || (list != null && !list.Any())) - { - string sql = $@"SELECT * -FROM Ghrs_ParaDetail -WHERE ParaMasterId IN (SELECT ParaMasterId - FROM Ghrs_ParaMaster - WHERE ParaMasterNo = '{key}' - AND ParaTypeNo IN ('GhrStaff', - 'GHRPara', - 'Train', - 'Resume', - 'GHRAttend','Performance','Survey')) - AND IsEnable = 1 -ORDER BY SortNo ASC"; - list = DbAccess.QueryList(sql); - if (list.Any()) - await _caching.SetAsync(key, list); - } - - if (list.Any(x => x.ParaDetailNo == value)) - label = list.FirstOrDefault(x => x.ParaDetailNo == value)?.ParaDetailName; - return label; - } - - public async Task> GetParaList(string key) - { - if (key.IsNullOrEmpty()) - return null; - - var list = await _caching.GetAsync>(key); - if (list == null || (list != null && !list.Any())) - { - string sql = $@"SELECT * -FROM Ghrs_ParaDetail -WHERE ParaMasterId IN (SELECT ParaMasterId - FROM Ghrs_ParaMaster - WHERE ParaMasterNo = '{key}' - AND ParaTypeNo IN ('GhrStaff', - 'GHRPara', - 'Train', - 'Resume', - 'GHRAttend')) - AND IsEnable = 1 -ORDER BY SortNo ASC"; - list = DbAccess.QueryList(sql); - if (list.Any()) - await _caching.SetAsync(key, list); - } - return list; - } - - public async Task GetParaLabelListString(string ParaTypeNo, string ParaMasterNo, string value) - { - string label = value; - - if (value.IsNullOrEmpty()) - return null; - - string sql = $@"SELECT [dbo].[FLangKeyToValue](mkey,1,ParaDetailName) ParaDetailName -FROM Ghrs_ParaDetail -where IsEnable=1 - and ParaTypeNo = '{ParaTypeNo}' - and ParaMasterNo = '{ParaMasterNo}' - and ParaDetailNo in (select value from Openjson('{value}')) -ORDER BY SortNo ASC"; - var list = DbAccess.QueryList(sql); - - label = string.Join(",", list.Select(o => o.ParaDetailName)); - return label; - } - - public async Task GetParaLabel(int? id) - { - string label = string.Empty; - - if (id.IsNullOrEmpty()) - return null; - var ParaMasterNo = DbAccess.ExecuteScalar(@$"SELECT ParaMasterNo -FROM Ghrs_ParaDetail -WHERE ParaDetailId ='{id}'"); - - var list = await _caching.GetAsync>(ParaMasterNo.ObjToString()); - if (list == null || (list != null && !list.Any())) - { - string sql = $@"SELECT * -FROM Ghrs_ParaDetail -WHERE ParaMasterId IN (SELECT ParaMasterId - FROM Ghrs_ParaMaster - WHERE ParaMasterNo = '{ParaMasterNo}' - AND ParaTypeNo IN ('GhrStaff', - 'GHRPara', - 'Train', - 'Resume', - 'GHRAttend')) - AND IsEnable = 1 -ORDER BY SortNo ASC"; - list = DbAccess.QueryList(sql); - if (list.Any()) - await _caching.SetAsync(ParaMasterNo.ObjToString(), list); - } - - if (list.Any(x => x.ParaDetailId == id)) - label = list.FirstOrDefault(x => x.ParaDetailId == id)?.ParaDetailName; - return label; - } - - /// - /// - /// - /// - /// - public async Task GetDataBelongName(int? id) - { - string label = string.Empty; - - if (id == null) - return null; - if (_caching != null) - { - var list = await _caching.GetAsync>("DataBelong"); - if (list == null || (list != null && !list.Any())) - { - list = await Db.Queryable().ToListAsync(); - if (list.Any()) - await _caching.SetAsync("DataBelong", list); - } - - if (list.Any(x => x.DataBelongId == id)) - label = list.FirstOrDefault(x => x.DataBelongId == id)?.DataBelongName; - } - else - label = await Db.Queryable().Where(x => x.DataBelongId == id).Select(x => x.DataBelongName).FirstAsync(); - - - return label; - } - #endregion - - #region 处理json查询条件 - public string DealConditions(string conditions, string name, string value) - { - var jsonParam = JsonHelper.JsonToObj(value); - - switch (jsonParam.operationKey) - { - case "Include": - if (jsonParam.columnValue != null) - conditions += $" AND {name} LIKE '%{jsonParam.columnValue}%'"; - break; - case "NotInclude": - if (jsonParam.columnValue != null) - conditions += $" AND {name} NOT LIKE '%{jsonParam.columnValue}%'"; - break; - case "IsNull": - conditions += $" AND {name} IS NULL"; - break; - case "NotNull": - conditions += $" AND {name} IS NOT NULL"; - break; - case "Equal": - if (jsonParam.columnValue != null) - conditions += $" AND {name} ='{jsonParam.columnValue}'"; - break; - case "NotEqual": - if (jsonParam.columnValue != null) - conditions += $" AND {name} !='{jsonParam.columnValue}'"; - break; - case "GreaterOrEqual"://大于等于 - if (jsonParam.columnValue != null) - conditions += $" AND {name} >='{jsonParam.columnValue}'"; - break; - case "Greater"://大于 - if (jsonParam.columnValue != null) - conditions += $" AND {name} >'{jsonParam.columnValue}'"; - break; - case "LessOrEqual"://小于等于 - if (jsonParam.columnValue != null) - conditions += $" AND {name} <='{jsonParam.columnValue}'"; - break; - case "Less"://小于 - if (jsonParam.columnValue != null) - conditions += $" AND {name} <'{jsonParam.columnValue}'"; - break; - case "EqualAny":// - if (jsonParam.columnValue != null) - { - var ids1 = JsonHelper.JsonToObj>(jsonParam.columnValue.ToString()); - - conditions += $" AND {name} IN ({string.Join(",", ids1.Select(id => "'" + id + "'"))})"; - } - break; - case "NotEqualAny":// - if (jsonParam.columnValue != null) - { - var ids1 = JsonHelper.JsonToObj>(jsonParam.columnValue.ToString()); - - conditions += $" AND ({name} NOT IN ({string.Join(",", ids1.Select(id => "'" + id + "'"))}) OR {name} IS NULL)"; - } - break; - case "Range":// - if (jsonParam.columnValue != null) - { - var ids1 = JsonHelper.JsonToObj>(jsonParam.columnValue.ToString()); - - conditions += $" AND ({name}>='{ids1[0]} 00:00:00' AND {name}<='{ids1[1]} 23:59:59')"; - } - break; - default: - break; - } - - return conditions; - } - public string DealConditions1(string conditions, string name, string value) - { - return DealConditions(conditions, "A." + name, value); - } - #endregion - - public string GetQueryString(string sqlSelect, int? currentPage = null, int? pageSize = null, string sortField = null) - { - string queryString = string.Empty; - if (string.IsNullOrEmpty(sortField)) - queryString = "SELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY ROW_ID) NUM FROM (SELECT * FROM (" + sqlSelect + " WHERE 1=1 "; - else - { - if (!string.IsNullOrEmpty(sortField)) - queryString = "SELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY " + sortField + ") NUM FROM (SELECT * FROM (" + sqlSelect + " "; - else - queryString = "SELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY " + sortField + " DESC) NUM FROM (SELECT * FROM (" + sqlSelect + " "; - } - queryString += ") A ) B ) C"; - if (currentPage != null && pageSize != null) - queryString += " WHERE NUM <= " + currentPage * pageSize + " AND NUM >" + (currentPage - 1) * pageSize; - return queryString; - } - - public int? GetStaffId() - { - int? StaffId = null; - string sql = $"SELECT UserStaffID FROM Ghrs_User WHERE UserId='{App.User.ID}'"; - string StaffId1 = Convert.ToString(DbAccess.ExecuteScalar(sql)); - if (!StaffId1.IsNull()) - StaffId = Convert.ToInt32(StaffId1); - return StaffId; - } - public async Task GetUser() - { - return await Db.Queryable().Where(x => x.UserId == App.User.ID).FirstAsync(); - } - - #region 获取部门列表 - public static void LoopToAppendChildren(List depts, List depts1, Ghro_Dept dept) - { - var depts2 = depts.Where(x => x.ParentDeptID == dept.DeptID).ToList(); - depts1.AddRange(depts2); - foreach (var item in depts2) - { - LoopToAppendChildren(depts, depts1, item); - } - } - public async Task> GetDeptList(List depts, int? deptId = null) - { - if (!depts.Any()) - depts = await Db.Queryable().ToListAsync(); - if (!deptId.IsNullOrEmpty()) - { - var dept = depts.Where(x => x.DeptID == deptId).FirstOrDefault(); - List depts1 = [dept]; - - LoopToAppendChildren(depts, depts1, dept); - return depts1; - } - else return depts; - } - #endregion - - public async Task> GetUserStaffPrivIds(int userId, int? staffId = null, DateTime? date = null) - { - if (date == null) date = DateTime.Now; - var @CDate = date; - var @UserID = userId; - var @StaffID = staffId.IsNullOrEmpty() ? -1 : staffId.Value; - int @UserStaffID = await Db.Ado.GetIntAsync($"SELECT UserStaffID FROM Ghrs_User WHERE UserId='{userId}'"); - - var @CompanySpecCode = string.Empty; - int @UserDeptID = 0; - //int @DataRoleType = 0; //--1 员工自身 2 全部人员 3 按设定 - //int @DeptType = 0; //1 按挑选 2 主管(含下阶) 3 主管(不含下阶) 4 部门助理(含下阶) 5 部门助理(不含下阶) 6 所在部门(含下阶) 7 所在部门(不含下阶) 8: 全部部门 - int? - @DeptID, - @TitleID, - @GradeID, - @DataBelongID, - @PeriodMasterID, - @ZoneID, - @StaffType1; - var sql = @$"SELECT CompanySpecCode - FROM ghro_company - WHERE IsEnable = 1"; - @CompanySpecCode = await Db.Ado.GetStringAsync(sql); - - //--读取使用者对应的资料权限群组 - sql = @$"SELECT b.DataRoleID, - DataRoleType, - DeptType, - AllDataBelong, - AllGrade, - AllTitle, - AllZone, - AllPeriodMaster, - ALLDL_IDL, - DataRoleNo - FROM Ghrs_UserDataRole a, Ghrs_DataRole b - WHERE UserID = {@UserID} - AND a.IsEnable = 1 - AND b.IsEnable = 1 - AND b.DataRoleId = a.DataRoleId - ORDER BY DataRoleType, DeptType DESC"; - - var dataRoles = await Db.Ado.SqlQueryAsync(sql); - - var scr = Db.Queryable(); - if (@StaffID == -1) - { - if (dataRoles.Where(x => x.DataRoleType == 2).Any())// 全部人员权限 - return await scr.Select(x => x.StaffID).ToListAsync(); - - var staffIds = new List(); - var depts = new List(); - depts = await GetDeptList(depts); - for (int i = 0; i < dataRoles.Count; i++) - { - var deptIds = new List(); - var dataRole = dataRoles[i]; - - //--2 集团数据归属编号 - var dataBelongIds = new List(); - if (dataRole.@AllDataBelong == 0) - { - dataBelongIds = await Db.Queryable() - .Where(x => - x.IsEnable == 1 && - x.DataTypeID == 2 && - x.DataID != null && - x.DataRoleId != null && - x.DataRoleId == dataRole.DataRoleID) - .Select(x => x.DataID.Value).ToListAsync(); - } - - //-- 3 职等编号 - var gradeIds = new List(); - if (dataRole.@AllGrade == 0) - { - gradeIds = await Db.Queryable() - .Where(x => - x.IsEnable == 1 && - x.DataTypeID == 3 && - x.DataID != null && - x.DataRoleId != null && - x.DataRoleId == dataRole.DataRoleID) - .Select(x => x.DataID.Value).ToListAsync(); - } - - //-- 4 职称编号 - var titleIds = new List(); - if (dataRole.@AllTitle == 0) - { - titleIds = await Db.Queryable() - .Where(x => - x.IsEnable == 1 && - x.DataTypeID == 4 && - x.DataID != null && - x.DataRoleId != null && - x.DataRoleId == dataRole.DataRoleID) - .Select(x => x.DataID.Value).ToListAsync(); - } - - //-- 5 厂区编号 - var zoneIds = new List(); - if (dataRole.@AllZone == 0) - { - zoneIds = await Db.Queryable() - .Where(x => - x.IsEnable == 1 && - x.DataTypeID == 5 && - x.DataID != null && - x.DataRoleId != null && - x.DataRoleId == dataRole.DataRoleID) - .Select(x => x.DataID.Value).ToListAsync(); - } - - //-- 6 计薪类别编号 - var periodMasterIds = new List(); - if (dataRole.@AllPeriodMaster == 0) - { - periodMasterIds = await Db.Queryable() - .Where(x => - x.IsEnable == 1 && - x.DataTypeID == 6 && - x.DataID != null && - x.DataRoleId != null && - x.DataRoleId == dataRole.DataRoleID) - .Select(x => x.DataID.Value).ToListAsync(); - } - - //-- 7 直间接编号 - var DL_IDLIds = new List(); - if (dataRole.@ALLDL_IDL == 0) - DL_IDLIds = await Db.Queryable().Where(x => - x.IsEnable == 1 && - x.DataTypeID == 6 && - x.DataID != null && - x.DataRoleId != null && - x.DataRoleId == dataRole.DataRoleID) - .Select(x => x.DataID.Value).ToListAsync(); - - //判断部门的权限 @DeptType - - - //7 所在部门(不含下阶) - if (dataRole.@DeptType == 7) - deptIds.Add(@UserStaffID); - - //6 所在部门(含下阶) - if (dataRole.@DeptType == 6) - { - var dept = depts.Where(x => x.DeptID == @UserStaffID).FirstOrDefault(); - if (dept != null) - await GetDeptList(depts, dept.DeptID); - } - - //5 部门助理(不含下阶) - if (dataRole.@DeptType == 5) - { - var depts1 = depts.Where(x => x.DeptAssID == @UserStaffID).ToList(); - deptIds.AddRange(depts1.Select(x => x.DeptID.Value).ToList()); - } - - //4 部门助理(含下阶) - if (dataRole.@DeptType == 4) - { - var depts1 = depts.Where(x => x.DeptAssID == @UserStaffID).ToList(); - - foreach (var dept in depts1) - { - var items = await GetDeptList(depts, dept.DeptID); - deptIds.AddRange(items.Select(x => x.DeptID.Value).ToList()); - } - } - - //3 主管(不含下阶) - if (dataRole.@DeptType == 3) - { - var depts1 = depts.Where(x => x.DeptManagerID == @UserStaffID).ToList(); - - deptIds.AddRange(depts1.Select(x => x.DeptID.Value).ToList()); - } - - //2 主管(含下阶) - if (dataRole.@DeptType == 2) - { - var depts1 = depts.Where(x => x.DeptManagerID == @UserStaffID).ToList(); - - foreach (var dept in depts1) - { - var items = await GetDeptList(depts, dept.DeptID); - deptIds.AddRange(items.Select(x => x.DeptID.Value).ToList()); - } - } - - //1 按挑选 - if (dataRole.@DeptType == 1) - { - - sql = @$"SELECT DataID - FROM Ghrs_DataRoleDetail - WHERE IsEnable = 1 - AND DataRoleID = {dataRole.DataRoleID} - AND DataTypeID = 1 - AND IncludeSub = 0"; - - var dataIDs = await Db.Ado.SqlQueryAsync(sql); - - - if (!dataIDs.Any()) - { - sql = @$"SELECT DataID - FROM Ghrs_DataRoleDetail - WHERE IsEnable = 1 - AND DataRoleID = {dataRole.DataRoleID} - AND DataTypeID = 1 - AND IncludeSub = 1"; - - dataIDs = await Db.Ado.SqlQueryAsync(sql); - - foreach (var dataID in dataIDs) - { - var items = await GetDeptList(depts, dataID); - deptIds.AddRange(items.Select(x => x.DeptID.Value).ToList()); - } - } - else - deptIds.AddRange(dataIDs); - - } - deptIds = deptIds.Distinct().ToList(); - var ids = await scr - .WhereIF(dataRole.@AllDataBelong == 0, x => x.DataBelongID != null && dataBelongIds.Contains(x.DataBelongID.Value)) - .WhereIF(dataRole.@AllGrade == 0, x => x.GradeID != null && gradeIds.Contains(x.GradeID.Value)) - .WhereIF(dataRole.@AllTitle == 0, x => x.TitleID != null && titleIds.Contains(x.TitleID.Value)) - .WhereIF(dataRole.@AllZone == 0, x => x.ZoneID != null && zoneIds.Contains(x.ZoneID.Value)) - .WhereIF(dataRole.@AllPeriodMaster == 0, x => x.PeriodMasterID != null && periodMasterIds.Contains(x.PeriodMasterID.Value)) - .WhereIF(dataRole.@ALLDL_IDL == 0, x => x.StaffType1 != null && DL_IDLIds.Contains(x.StaffType1.Value)) - .Where(x => (x.DeptID != null && deptIds.Contains(x.DeptID.Value)) - ).Select(x => x.StaffID).ToListAsync(); - staffIds.AddRange(ids); - } - - staffIds.Add(UserStaffID); - staffIds.Distinct().ToList(); - return staffIds; - - } - else - { - #region 员工默认有自己的权限 - if (staffId == @UserStaffID) - return [@StaffID]; - #endregion - - sql = @$"SELECT DeptID, - TitleID, - GradeID, - ZoneID, - DataBelongID, - PeriodMasterID, - StaffType1 - FROM ghra_Staff - WHERE StaffID = {staffId}"; - - var staff = await Db.Ado.SqlQuerySingleAsync(sql); - if (staff.IsNullOrEmpty()) - return []; - - @DeptID = staff.DeptID; - @TitleID = staff.TitleID; - @GradeID = staff.GradeID; - @ZoneID = staff.ZoneID; - @DataBelongID = staff.DataBelongID; - @PeriodMasterID = staff.PeriodMasterID; - @StaffType1 = staff.StaffType1; - - #region 员工默认有自己下属的权限 - sql = @$"select count(1) from Ghro_Dept - where IsEnable=1 and DeptManagerID={@UserStaffID} - and [dbo].[FDeptAisBChild] ({@DeptID},DeptID{@CDate},1)=1 )"; - - //--副主管也有权限 - int? @IsOneDeptTowManager = await Db.Ado.GetIntAsync($"SELECT dbo.FS_ParameterValue('IsOneDeptTowManager')"); - if (@IsOneDeptTowManager == 1) - sql = @$"select count(1) from Ghro_Dept - where IsEnable=1 and DeptManagerID2={@UserStaffID} - and [dbo].[FDeptAisBChild] ({@DeptID},DeptID{@CDate},1)=1 )"; - #endregion - - for (int i = 0; i < dataRoles.Count; i++) - { - var dataRole = dataRoles[i]; - - if (dataRole.DataRoleType == 2)// 全部人员权限 - return [@StaffID]; - - if (dataRole.DataRoleType == 1 && @UserStaffID == @StaffID) // 员工自身权限 - return [@StaffID]; - - //1 部门编号 - //2 集团数据归属编号 - //3 职等编号 - //4 职称编号 - //5 厂区编号 - //6 计薪类别编号 - //7 直间接编号 - if (dataRole.@AllDataBelong == 0) - { - sql = @$"SELECT DataID - FROM Ghrs_DataRoleDetail - WHERE IsEnable = 1 - AND DataRoleID = {dataRole.DataRoleID} - AND {@DataBelongID} = DataID - AND DataTypeID = 2"; - var dataIDs = await Db.Ado.SqlQueryAsync(sql); - if (!dataIDs.Any()) - continue; - } - - if (dataRole.@AllGrade == 0) - { - sql = @$"SELECT DataID - FROM Ghrs_DataRoleDetail - WHERE IsEnable = 1 - AND DataRoleID = {dataRole.DataRoleID} - AND {@DataBelongID} = DataID - AND DataTypeID = 3"; - var dataIDs = await Db.Ado.SqlQueryAsync(sql); - if (!dataIDs.Any()) - continue; - } - if (dataRole.@AllTitle == 0) - { - sql = @$"SELECT DataID - FROM Ghrs_DataRoleDetail - WHERE IsEnable = 1 - AND DataRoleID = {dataRole.DataRoleID} - AND {@DataBelongID} = DataID - AND DataTypeID = 4"; - var dataIDs = await Db.Ado.SqlQueryAsync(sql); - if (!dataIDs.Any()) - continue; - } - if (dataRole.@AllZone == 0) - { - sql = @$"SELECT DataID - FROM Ghrs_DataRoleDetail - WHERE IsEnable = 1 - AND DataRoleID = {dataRole.DataRoleID} - AND {@DataBelongID} = DataID - AND DataTypeID = 5"; - var dataIDs = await Db.Ado.SqlQueryAsync(sql); - if (!dataIDs.Any()) - continue; - } - if (dataRole.@AllPeriodMaster == 0) - { - sql = @$"SELECT DataID - FROM Ghrs_DataRoleDetail - WHERE IsEnable = 1 - AND DataRoleID = {dataRole.DataRoleID} - AND {@DataBelongID} = DataID - AND DataTypeID = 6"; - var dataIDs = await Db.Ado.SqlQueryAsync(sql); - if (!dataIDs.Any()) - continue; - } - if (dataRole.ALLDL_IDL == 0) - { - sql = @$"SELECT DataID - FROM Ghrs_DataRoleDetail - WHERE IsEnable = 1 - AND DataRoleID = {dataRole.DataRoleID} - AND {@DataBelongID} = DataID - AND DataTypeID = 7"; - var dataIDs = await Db.Ado.SqlQueryAsync(sql); - if (!dataIDs.Any()) - continue; - } - //判断部门的权限 @DeptType - //1 按挑选 - //2 主管(含下阶) - //3 主管(不含下阶) - //4 部门助理(含下阶) - //5 部门助理(不含下阶) - //6 所在部门(含下阶) - //7 所在部门(不含下阶) - - if (dataRole.@DeptType == 7) - { - if (@UserDeptID == 0) - { - sql = $@"SELECT DeptID - FROM Ghra_staff - WHERE StaffID = {@UserStaffID}"; - @UserDeptID = await Db.Ado.GetIntAsync(sql); - } - if (@DeptID != @UserDeptID) - continue; - } - - if (dataRole.@DeptType == 6) - { - if (@UserDeptID == 0) - { - sql = $@"SELECT DeptID - FROM Ghra_staff - WHERE StaffID = {@UserStaffID}"; - @UserDeptID = await Db.Ado.GetIntAsync(sql); - } - sql = @$"SELECT [dbo].[FDeptAisBChild] ({@DeptID}, - {@UserDeptID}, - {@CDate}, - 1)"; - - if (await Db.Ado.GetIntAsync(sql) == 0) - continue; - } - - if (dataRole.@DeptType == 5) - { - sql = @$"SELECT count (1) - FROM Ghro_Dept - WHERE IsEnable = 1 - AND DeptAssID = {@UserStaffID} - AND DeptID = {@DeptID}"; - - if (await Db.Ado.GetIntAsync(sql) == 0) - continue; - } - - if (dataRole.@DeptType == 4) - { - sql = @$"SELECT COUNT (1) - FROM Ghro_Dept - WHERE IsEnable = 1 - AND DeptAssID = {@UserStaffID} - AND [dbo].[FDeptAisBChild] ({@DeptID}, - DeptID, - {@CDate}, - 1) = 1"; - - if (await Db.Ado.GetIntAsync(sql) == 0) - continue; - } - - if (dataRole.@DeptType == 3) - { - sql = @$"SELECT count (1) - FROM Ghro_Dept - WHERE IsEnable = 1 - AND DeptManagerID = {@UserStaffID} - AND DeptID = {@DeptID}"; - - if (await Db.Ado.GetIntAsync(sql) == 0) - continue; - } - - if (dataRole.@DeptType == 2) - { - sql = @$"SELECT count (1) - FROM Ghro_Dept - WHERE IsEnable = 1 - AND DeptManagerID = {@UserStaffID} - AND [dbo].[FDeptAisBChild] ({@DeptID}, - DeptID, - {@CDate}, - 1) = 1"; - - if (await Db.Ado.GetIntAsync(sql) == 0) - continue; - } - - if (dataRole.@DeptType == 1) - { - - sql = @$"SELECT count (1) - FROM Ghrs_DataRoleDetail - WHERE IsEnable = 1 - AND DataRoleID = {dataRole.DataRoleID} - AND {@DeptID} = DataID - AND DataTypeID = 1 - AND IncludeSub = 0"; - - var tempId = await Db.Ado.GetIntAsync(sql); - - if (tempId == 0) - { - sql = @$"SELECT count (1) - FROM Ghrs_DataRoleDetail - WHERE IsEnable = 1 - AND DataRoleID = {dataRole.DataRoleID} - AND [dbo].[FDeptAisBChild] ({@DeptID}, - DataID, - {@CDate}, - 1) = 1 - AND DataTypeID = 1 - AND IncludeSub = 1"; - - tempId = await Db.Ado.GetIntAsync(sql); - } - - if (tempId == 0) continue; - - } - return [@StaffID]; - } - } - return default; - - } - - //public int GetTotalCount(string sqlSelect) - //{ - // string sql = string.Empty; - - // try - // { - // int count = Convert.ToInt32(DBHelper.ExecuteScalar(sql)); - // return count; - // } - // catch (Exception Ex) - // { - // throw; - // } - //} - - public async Task QueryCompanyCode() - { - var sql = @$"SELECT CompanySpecCode - FROM ghro_company - WHERE IsEnable = 1"; - return await Db.Ado.GetStringAsync(sql); - } - - #region 发送站内信 - public async Task SendMessage(List staffIds, string title, string content, string webUrl = null) - { - for (int i = 0; i < staffIds.Count; i++) - { - //string sql = @$"select UserId from Ghrs_User where UserStaffID={staffIds[i]}"; - - //var userId = await Db.Ado.GetIntAsync(sql); - - - var id = await Db.Insertable(new Ghrm_MessageText() - { - GroupType = "Staff", - Title = title, - Content = content, - SortNo = 0, - IsDefault = 0, - IsEnable = 1, - WEBUrl = webUrl, - Tag = "Resume", - JumpType = webUrl == null ? "text" : "link" - }).ExecuteReturnIdentityAsync(); - await Db.Insertable(new Ghrm_MessageUser() - { - MessageTextID = id, - SenderStaffID = 0, - ReceiveStaffID = staffIds[i], - SortNo = 0, - IsDefault = 0, - IsEnable = 1, - ReadStatus = 0, - }).ExecuteReturnIdentityAsync(); - - } - - await SendQYWechateMessage(staffIds, title, content); - - } - public async Task SendQYWechateMessage(List staffIds, string title, string content, string webUrl = null) - { - string sql = @$"Declare @Json nvarchar(max) = '' - set @Json = (select '{title}' title, - 'textcard' msgtype, - '
'+CONVERT(nvarchar(16),getdate(),121)+'
-
{content}
-
' [description] , - 'Re'+(select Top 1 ParameterValue from Ghrs_Parameter where ParameterNo='GHRURL')+'/appOauth.html?jumpPage='+'F_APP_message/msgGroupList' url, - 'GHR' picurl, - '' htmlStr, - {string.Join(',', staffIds.Select(x => x))} toStaffIDs - for json path) - -- select @Json - exec [dbo].[PS_CreateWorkwxMsg] @Json,'Resume'"; - - sql = @$"Declare @Json nvarchar(max) = '' - set @Json = (select '{title}' title, - 'text' msgtype, - '{content}\n请至【GHR人力资源系统-招聘】下查看' [description] , - 'Re'+(select Top 1 ParameterValue from Ghrs_Parameter where ParameterNo='GHRURL')+'/appOauth.html?jumpPage='+'F_APP_message/msgGroupList' url, - 'GHR' picurl, - '' htmlStr, - '{string.Join(',', staffIds.Select(x => x))}' toStaffIDs - for json path) - -- select @Json - exec [dbo].[PS_CreateWorkwxMsg] @Json,'Resume'"; - - // Declare @Json nvarchar(max) = '' - // set @Json = (select '测试提醒' title, - // 'markdown' msgtype, - // '您有个简历待面试,面试时间:2024/12/15 00:00~08:08,请及时查看! - //> **流程信息 * * - //> 申 请 人:< font color =\"info\">tisking 陶兰 - //> 假 别: < font color =\"warning\">事假 - //> 开始时间:< font color =\"comment\">2022-01-21 09:00 - //> 结束时间:< font color =\"comment\">2022-01-21 11:00 - //> - //> 请尽快核准" - // ' [description] , - // '' url, - // 'GHR' picurl, - // '' htmlStr, - // StaffID toStaffIDs - // from Ghra_Staff - // where StaffNo = 'tisking' - // for json path) - // select @Json - // exec[dbo].[PS_CreateWorkwxMsg] @Json,'Test' - - - - await Db.Ado.ExecuteCommandAsync(sql); - } - - #endregion - - #region 获取多语 - public async Task QueryLangValue(string key, int? langId, string defaultValue) - { - string sql = $"select [dbo].[FLangKeyToValue]('{key}',{langId},null)"; - string value = await Db.Ado.GetStringAsync(sql); - if (value.IsNullOrEmpty()) value = defaultValue; - return value; - } - public async Task QueryLangValue(string key, string defaultValue) - { - return await QueryLangValue(key, LangId, defaultValue); - } - public async Task QueryLangValue(string key, string defaultValue, object arg0) - { - var value = await QueryLangValue(key, LangId, defaultValue); - return string.Format(value, arg0); - } - public async Task QueryLangValue(string key, string defaultValue, object arg0, object arg1) - { - var value = await QueryLangValue(key, LangId, defaultValue); - return string.Format(value, arg0, arg1); - } - public async Task QueryLangValue(string key, string defaultValue, object arg0, object arg1, object arg2) - { - var value = await QueryLangValue(key, LangId, defaultValue); - return string.Format(value, arg0, arg1, arg2); - } - #endregion - - - - public async Task QueryConfigValue(string code, string tableName = "Ghre_Config") - { - var sql = @$"SELECT ConfigValue FROM {tableName} WHERE ConfigCode='MULTIPLE_EXAM_SCORE_RECOGNITION' AND IsEnable=1"; - return await Db.Ado.GetStringAsync(sql); - } - - #endregion -} \ No newline at end of file diff --git a/Tiobon.Core.Services/BASE/BaseServices1.cs b/Tiobon.Core.Services/BASE/BaseServices1.cs deleted file mode 100644 index ff9e112a..00000000 --- a/Tiobon.Core.Services/BASE/BaseServices1.cs +++ /dev/null @@ -1,328 +0,0 @@ -namespace Tiobon.Core.Services.BASE; - -public class BaseServices : IBaseServices where TEntity : class, new() -{ - public BaseServices(IBaseRepository BaseDal = null) - { - this.BaseDal = BaseDal; - } - - //public IBaseRepository baseDal = new BaseRepository(); - public IBaseRepository BaseDal { get; set; } //通过在子类的构造函数中注入,这里是基类,不用构造函数 - - public ISqlSugarClient Db => BaseDal.Db; - - public async Task QueryById(object objId) - { - return await BaseDal.QueryById(objId); - } - - /// - /// 根据ID查询一条数据 - /// - /// id(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]),如果是联合主键,请使用Where条件 - /// 是否使用缓存 - /// 数据实体 - public async Task QueryById(object objId, bool blnUseCache = false) - { - return await BaseDal.QueryById(objId, blnUseCache); - } - - /// - /// 根据ID查询数据 - /// - /// id列表(必须指定主键特性 [SugarColumn(IsPrimaryKey=true)]),如果是联合主键,请使用Where条件 - /// 数据实体列表 - public async Task> QueryByIDs(object[] lstIds) - { - return await BaseDal.QueryByIDs(lstIds); - } - - /// - /// 写入实体数据 - /// - /// 博文实体类 - /// - public async Task Add(TEntity entity) - { - return await BaseDal.Add(entity); - } - - /// - /// 批量插入实体(速度快) - /// - /// 实体集合 - /// 影响行数 - public async Task> Add(List listEntity) - { - return await BaseDal.Add(listEntity); - } - - /// - /// 更新实体数据 - /// - /// 博文实体类 - /// - public async Task Update(TEntity entity) - { - return await BaseDal.Update(entity); - } - /// - /// 更新实体数据 - /// - /// 博文实体类 - /// - public async Task Update(List entity) - { - return await BaseDal.Update(entity); - } - - public async Task Update(TEntity entity, string where) - { - return await BaseDal.Update(entity, where); - } - - public async Task Update(object operateAnonymousObjects) - { - return await BaseDal.Update(operateAnonymousObjects); - } - - public async Task Update(TEntity entity, List lstColumns = null, List lstIgnoreColumns = null, string where = "") - { - return await BaseDal.Update(entity, lstColumns, lstIgnoreColumns, where); - } - - - /// - /// 根据实体删除一条数据 - /// - /// 博文实体类 - /// - public async Task Delete(TEntity entity) - { - return await BaseDal.Delete(entity); - } - - /// - /// 删除指定ID的数据 - /// - /// 主键ID - /// - public async Task DeleteById(object id) - { - return await BaseDal.DeleteById(id); - } - - /// - /// 删除指定ID集合的数据(批量删除) - /// - /// 主键ID集合 - /// - public async Task DeleteByIds(object[] ids) - { - return await BaseDal.DeleteByIds(ids); - } - - - /// - /// 查询所有数据 - /// - /// 数据列表 - public async Task> Query() - { - return await BaseDal.Query(); - } - - /// - /// 查询数据列表 - /// - /// 条件 - /// 数据列表 - public async Task> Query(string where) - { - return await BaseDal.Query(where); - } - - /// - /// 查询数据列表 - /// - /// whereExpression - /// 数据列表 - public async Task> Query(Expression> whereExpression) - { - return await BaseDal.Query(whereExpression); - } - - /// - /// 按照特定列查询数据列表 - /// - /// - /// - /// - public async Task> Query(Expression> expression) - { - return await BaseDal.Query(expression); - } - - /// - /// 按照特定列查询数据列表带条件排序 - /// - /// - /// 过滤条件 - /// 查询实体条件 - /// 排序条件 - /// - public async Task> Query(Expression> expression, Expression> whereExpression, string orderByFileds) - { - return await BaseDal.Query(expression, whereExpression, orderByFileds); - } - - /// - /// 查询一个列表 - /// - /// 条件表达式 - /// 排序字段,如name asc,age desc - /// 数据列表 - public async Task> Query(Expression> whereExpression, Expression> orderByExpression, bool isAsc = true) - { - return await BaseDal.Query(whereExpression, orderByExpression, isAsc); - } - - public async Task> Query(Expression> whereExpression, string orderByFileds) - { - return await BaseDal.Query(whereExpression, orderByFileds); - } - - /// - /// 查询一个列表 - /// - /// 条件 - /// 排序字段,如name asc,age desc - /// 数据列表 - public async Task> Query(string where, string orderByFileds) - { - return await BaseDal.Query(where, orderByFileds); - } - - /// - /// 根据sql语句查询 - /// - /// 完整的sql语句 - /// 参数 - /// 泛型集合 - public async Task> QuerySql(string sql, SugarParameter[] parameters = null) - { - return await BaseDal.QuerySql(sql, parameters); - } - - /// - /// 根据sql语句查询 - /// - /// 完整的sql语句 - /// 参数 - /// DataTable - public async Task QueryTable(string sql, SugarParameter[] parameters = null) - { - return await BaseDal.QueryTable(sql, parameters); - } - - /// - /// 查询前N条数据 - /// - /// 条件表达式 - /// 前N条 - /// 排序字段,如name asc,age desc - /// 数据列表 - public async Task> Query(Expression> whereExpression, int top, string orderByFileds) - { - return await BaseDal.Query(whereExpression, top, orderByFileds); - } - - /// - /// 查询前N条数据 - /// - /// 条件 - /// 前N条 - /// 排序字段,如name asc,age desc - /// 数据列表 - public async Task> Query(string where, int top, string orderByFileds) - { - return await BaseDal.Query(where, top, orderByFileds); - } - - /// - /// 分页查询 - /// - /// 条件表达式 - /// 页码(下标0) - /// 页大小 - /// 排序字段,如name asc,age desc - /// 数据列表 - public async Task> Query(Expression> whereExpression, int pageIndex, int pageSize, string orderByFileds) - { - return await BaseDal.Query(whereExpression, pageIndex, pageSize, orderByFileds); - } - - /// - /// 分页查询 - /// - /// 条件 - /// 页码(下标0) - /// 页大小 - /// 排序字段,如name asc,age desc - /// 数据列表 - public async Task> Query(string where, int pageIndex, int pageSize, string orderByFileds) - { - return await BaseDal.Query(where, pageIndex, pageSize, orderByFileds); - } - - public async Task> QueryPage(Expression> whereExpression, int pageIndex = 1, int pageSize = 20, string orderByFileds = null) - { - return await BaseDal.QueryPage(whereExpression, pageIndex, pageSize, orderByFileds); - } - public async Task> QueryMuch(Expression> joinExpression, Expression> selectExpression, Expression> whereLambda = null) where T : class, new() - { - return await BaseDal.QueryMuch(joinExpression, selectExpression, whereLambda); - } - - public async Task> QueryPage(PaginationModel pagination) - { - var express = DynamicLinqFactory.CreateLambda(pagination.Conditions); - return await QueryPage(express, pagination.PageIndex, pagination.PageSize, pagination.OrderByFileds); - } - - #region 分表 - - public async Task> AddSplit(TEntity entity) - { - return await BaseDal.AddSplit(entity); - } - - public async Task UpdateSplit(TEntity entity, DateTime dateTime) - { - return await BaseDal.UpdateSplit(entity, dateTime); - } - - /// - /// 根据实体删除一条数据 - /// - /// 博文实体类 - /// - public async Task DeleteSplit(TEntity entity, DateTime dateTime) - { - return await BaseDal.DeleteSplit(entity, dateTime); - } - - public async Task QueryByIdSplit(object objId) - { - return await BaseDal.QueryByIdSplit(objId); - } - - public async Task> QueryPageSplit(Expression> whereExpression, DateTime beginTime, DateTime endTime, int pageIndex = 1, int pageSize = 20, string orderByFields = null) - { - return await BaseDal.QueryPageSplit(whereExpression, beginTime, endTime, pageIndex, pageSize, orderByFields); - } - - #endregion -} - \ No newline at end of file diff --git a/Tiobon.Core.Services/GlobalUsings.cs b/Tiobon.Core.Services/GlobalUsings.cs index 5a6748bd..901cd902 100644 --- a/Tiobon.Core.Services/GlobalUsings.cs +++ b/Tiobon.Core.Services/GlobalUsings.cs @@ -18,7 +18,6 @@ global using Tiobon.Core.Common.UserManager; global using Tiobon.Core.DataAccess; global using Tiobon.Core.IRepository.Base; global using Tiobon.Core.IServices; -global using Tiobon.Core.IServices.BASE; global using Tiobon.Core.Model; global using Tiobon.Core.Model.Models; global using Tiobon.Core.Model.ViewModels.Extend; diff --git a/Tiobon.Core.Services/Tiobon.Core.Services.csproj b/Tiobon.Core.Services/Tiobon.Core.Services.csproj index 2863da8a..0472c1fe 100644 --- a/Tiobon.Core.Services/Tiobon.Core.Services.csproj +++ b/Tiobon.Core.Services/Tiobon.Core.Services.csproj @@ -31,5 +31,12 @@ + + + + + ..\Lib\Tiobon.Core.Base.dll + + diff --git a/Tiobon.Core.Tasks/Tiobon.Core.Tasks.csproj b/Tiobon.Core.Tasks/Tiobon.Core.Tasks.csproj index 882489df..4fc308d4 100644 --- a/Tiobon.Core.Tasks/Tiobon.Core.Tasks.csproj +++ b/Tiobon.Core.Tasks/Tiobon.Core.Tasks.csproj @@ -15,4 +15,10 @@ + + + ..\Lib\Tiobon.Core.Base.dll + + + diff --git a/Tiobon.Core.Tests/Tiobon.Core.Tests.csproj b/Tiobon.Core.Tests/Tiobon.Core.Tests.csproj index 0befef43..d9ada485 100644 --- a/Tiobon.Core.Tests/Tiobon.Core.Tests.csproj +++ b/Tiobon.Core.Tests/Tiobon.Core.Tests.csproj @@ -50,6 +50,12 @@ + + + ..\Lib\Tiobon.Core.Base.dll + + +