diff --git a/Src/Dlhis.Basic/Organization/Response/GainfoDetailResponse.cs b/Src/Dlhis.Basic/Organization/Response/GainfoDetailResponse.cs
index c147c32d..17205533 100644
--- a/Src/Dlhis.Basic/Organization/Response/GainfoDetailResponse.cs
+++ b/Src/Dlhis.Basic/Organization/Response/GainfoDetailResponse.cs
@@ -56,7 +56,7 @@ public class GainfoDetailResponse
///
/// 性别描述
///
- public string GenderCN => Gender.GetDescription();
+ public string GenderDesc => Gender.GetDescription();
///
/// 身份证籍贯
@@ -138,6 +138,7 @@ public class GainfoDetailResponse
///
/// 入职日期
///
+ [JsonConverter(typeof(ToDateJsonConverter))]
public DateTime? EntryDate { get; set; }
///
diff --git a/Src/Dlhis.Basic/Organization/Response/GainfoOutSourceExternalInfoResponse.cs b/Src/Dlhis.Basic/Organization/Response/GainfoOutSourceExternalInfoResponse.cs
index 820713f2..b6c7341f 100644
--- a/Src/Dlhis.Basic/Organization/Response/GainfoOutSourceExternalInfoResponse.cs
+++ b/Src/Dlhis.Basic/Organization/Response/GainfoOutSourceExternalInfoResponse.cs
@@ -1,4 +1,6 @@
using Dlhis.Basic.Organization.Dto;
+using Kurisu.AspNetCore.Utils.Converters;
+using Newtonsoft.Json;
namespace Dlhis.Basic.Organization.Response;
@@ -12,11 +14,13 @@ public class GainfoOutSourceExternalInfoResponse : GainfoOutSourceExternalInfoDt
///
/// 入职日期
///
+ [JsonConverter(typeof(ToDateJsonConverter))]
public DateTime? EntryDate { get; set; }
///
/// 离职日期
///
+ [JsonConverter(typeof(ToDateJsonConverter))]
public DateTime? ResignationDate { get; set; }
///
diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs
index 8af911b0..80615642 100644
--- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs
+++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoService.cs
@@ -100,13 +100,14 @@ public class GainfoService : IGainfoService
.LeftJoin((gainfo, department, type) => type.Code == SqlFunc.ToString(gainfo.CardType) && type.Type == "timeperiod")
.WhereIF(request.SearchType != GainfoSearchEnumType.BusinessTrip && request.DepartmentSelections?.Any() == false, gainfo => factories.Contains(gainfo.Factory))
.WhereIF(request.SearchType == GainfoSearchEnumType.Internal, gainfo => SqlFunc.Subqueryable().Where(p => p.Code == gainfo.Code).NotAny())
- .WhereIF(request.SearchType == GainfoSearchEnumType.Outsource, gainfo => SqlFunc.Subqueryable().Where(p => p.Code == gainfo.Code).Any())//&& today >= gainfo.EntryDate && today <= gainfo.ResignationDate
+ .WhereIF(request.SearchType == GainfoSearchEnumType.Outsource, gainfo => SqlFunc.Subqueryable().Where(p => p.Code == gainfo.Code).Any()) //&& today >= gainfo.EntryDate && today <= gainfo.ResignationDate
.WhereIF(request.SearchType == GainfoSearchEnumType.BusinessTrip, gainfo =>
SqlFunc.Subqueryable().Where(p => p.Code == gainfo.Code && factories.Contains(p.Destination) && SqlFunc.DateIsSame(p.BeginDate, today)).Any())
.WhereIF(request.Search.IsPresent(), gainfo =>
gainfo.Name.Contains(request.Search)
|| gainfo.Code == request.Search
|| gainfo.IdNo == request.Search)
+ .OrderByIF(request.SearchType == GainfoSearchEnumType.Outsource, gainfo => gainfo.ResignationDate, OrderByType.Desc) //外包人员按离职日期倒排
.Select((gainfo, department, type) => new GainfoPageResponse
{
DepartmentName = department.Name,
diff --git a/Src/Dlhis.Canteen/EMealVoucher/Controllers/EMealVoucherController.cs b/Src/Dlhis.Canteen/EMealVoucher/Controllers/EMealVoucherController.cs
index a4dd5f14..ab0f2f76 100644
--- a/Src/Dlhis.Canteen/EMealVoucher/Controllers/EMealVoucherController.cs
+++ b/Src/Dlhis.Canteen/EMealVoucher/Controllers/EMealVoucherController.cs
@@ -1,7 +1,10 @@
using Dlhis.Canteen.EMealVoucher.Request;
using Dlhis.Canteen.EMealVoucher.Response;
using Dlhis.Canteen.EMealVoucher.Services;
+using Dlhis.Canteen.Order.Request;
+using Dlhis.Canteen.Order.Response;
using Kurisu.AspNetCore.DataAccess.Dto;
+using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
@@ -73,4 +76,16 @@ public class EMealVoucherController : ControllerBase
{
return await _eMealVoucherService.GetQrCodeAsync(signature);
}
+
+ ///
+ /// 餐券消费分页
+ ///
+ ///
+ ///
+ [HttpGet("balance/page")]
+ [IgnoreTenant]
+ public async Task> GetEMealVoucherPageAsync([FromQuery] BalanceRecordEMealVoucherPageRequest request)
+ {
+ return await _eMealVoucherService.GetEMealVoucherPageAsync(request);
+ }
}
\ No newline at end of file
diff --git a/Src/Dlhis.Canteen/EMealVoucher/Services/IEMealVoucherService.cs b/Src/Dlhis.Canteen/EMealVoucher/Services/IEMealVoucherService.cs
index ef41f70a..3ef1ae4f 100644
--- a/Src/Dlhis.Canteen/EMealVoucher/Services/IEMealVoucherService.cs
+++ b/Src/Dlhis.Canteen/EMealVoucher/Services/IEMealVoucherService.cs
@@ -1,6 +1,9 @@
using Dlhis.Canteen.EMealVoucher.Request;
using Dlhis.Canteen.EMealVoucher.Response;
+using Dlhis.Canteen.Order.Request;
+using Dlhis.Canteen.Order.Response;
using Kurisu.AspNetCore.DataAccess.Dto;
+using Microsoft.AspNetCore.Mvc;
namespace Dlhis.Canteen.EMealVoucher.Services;
@@ -15,4 +18,6 @@ public interface IEMealVoucherService : IScopeDependency
Task RefreshSignatureAsync(long detailId);
Task GetQrCodeAsync(string signature);
+
+ Task> GetEMealVoucherPageAsync([FromQuery] BalanceRecordEMealVoucherPageRequest request);
}
\ No newline at end of file
diff --git a/Src/Dlhis.Canteen/EMealVoucher/Services/Implements/EMealVoucherService.cs b/Src/Dlhis.Canteen/EMealVoucher/Services/Implements/EMealVoucherService.cs
index c00c2fa1..fb689658 100644
--- a/Src/Dlhis.Canteen/EMealVoucher/Services/Implements/EMealVoucherService.cs
+++ b/Src/Dlhis.Canteen/EMealVoucher/Services/Implements/EMealVoucherService.cs
@@ -1,8 +1,13 @@
using System.Text;
using Dlhis.Canteen.EMealVoucher.Request;
using Dlhis.Canteen.EMealVoucher.Response;
+using Dlhis.Canteen.Order.Request;
+using Dlhis.Canteen.Order.Response;
+using Dlhis.Entity.Basic.Entity;
using Dlhis.Entity.Canteen.Entities;
+using Dlhis.Entity.Canteen.Enums;
using Kurisu.AspNetCore.Authentication.Abstractions;
+using Kurisu.AspNetCore.CustomClass;
using Kurisu.AspNetCore.DataAccess.Dto;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
@@ -103,4 +108,42 @@ public class EMealVoucherService : IEMealVoucherService
return qrCode;
}
+
+ ///
+ public async Task> GetEMealVoucherPageAsync(BalanceRecordEMealVoucherPageRequest request)
+ {
+ var tenantId = _currentUser.GetStringTenantId();
+
+ return await _dbContext.Queryable()
+ .LeftJoin((x, bPlace) => x.BusinessPlaceCode == bPlace.Code)
+ .LeftJoin((x, bPlace, department) => x.DepartmentNo == department.No)
+ .Where(x => x.Status == BalanceRecordStatusEnumType.Valid && x.Type == BalanceRecordTypeEnumType.Out) //有效,消费数据
+ .WhereIF(request.SearchDateTimePeriod.HasValue(), x => x.CostDate >= request.SearchDateTimePeriod.Start && x.CostDate <= request.SearchDateTimePeriod.End) //成本日期
+ .Where(x => x.Source == BalanceRecordSourceEnumType.EMealVoucher)
+ .Where(x => SqlFunc.Subqueryable().Where(p => p.Factory == tenantId).Where(p => p.Code == x.UserCode).Any() || x.TenantId == tenantId)
+ .Select((x, bPlace, department) => new BalanceRecordEMealVoucherResponse
+ {
+ No = x.No,
+ UserNo = x.UserNo,
+ Name = x.Name,
+ UserCode = x.UserCode,
+ DepartmentNo = x.DepartmentNo,
+ DepartmentName = department.Name,
+ CostDate = x.CostDate,
+ Remark = x.Remark,
+ Source = x.Source,
+ Type = x.Type,
+ Amount = SqlFunc.Abs(x.Amount),
+ BusinessPlaceName = bPlace.Name,
+ ShiftType = x.ShiftType,
+ DeviceInfo = x.DeviceUniqueNo,
+ CostId = x.CostId,
+ OriginTenantId = x.OriginTenantId,
+ Status = x.Status,
+ CostDateTime = x.CostDateTime,
+ Factory = x.TenantId,
+ Werks = x.Werks
+ })
+ .ToPageListAsync(request);
+ }
}
\ No newline at end of file
diff --git a/Src/Dlhis.Canteen/Order/Controllers/BalanceSummaryController.cs b/Src/Dlhis.Canteen/Order/Controllers/BalanceSummaryController.cs
index 154eafb0..2de326f2 100644
--- a/Src/Dlhis.Canteen/Order/Controllers/BalanceSummaryController.cs
+++ b/Src/Dlhis.Canteen/Order/Controllers/BalanceSummaryController.cs
@@ -1,4 +1,5 @@
using Dlhis.Canteen.Order.Request;
+using Dlhis.Canteen.Order.Request.Common;
using Dlhis.Canteen.Order.Response;
using Dlhis.Canteen.Order.Services;
using Kurisu.AspNetCore.DataAccess.Dto;
@@ -34,12 +35,12 @@ public class BalanceSummaryController : ControllerBase
}
///
- /// 用餐分析(成本中心)
+ /// 餐次用餐分析,统计部门成本中心金额
///
- [HttpGet("analysis/cost")]
- public async Task> BalanceRecordAnalysisByCostIdAsync()
+ [HttpGet("department/analysis/amount")]
+ public async Task> BalanceRecordAnalysisByCostIdAsync(SummaryCommonDto request)
{
- return await _balanceSummaryService.BalanceRecordAnalysisByCostIdAsync();
+ return await _balanceSummaryService.BalanceRecordAnalysisByCostIdAsync(request);
}
///
diff --git a/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs b/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs
index 32612c15..0e28e4db 100644
--- a/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs
+++ b/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs
@@ -1,5 +1,6 @@
using System.ComponentModel.DataAnnotations;
using System.Data;
+using Dlhis.Canteen.EMealVoucher.Services;
using Dlhis.Canteen.Order.Request;
using Dlhis.Canteen.Order.Response;
using Dlhis.Canteen.Order.Services;
diff --git a/Src/Dlhis.Canteen/Order/Request/BalanceRecordAnalysisByShiftRequest.cs b/Src/Dlhis.Canteen/Order/Request/BalanceRecordAnalysisByShiftRequest.cs
index 65f99310..0933998f 100644
--- a/Src/Dlhis.Canteen/Order/Request/BalanceRecordAnalysisByShiftRequest.cs
+++ b/Src/Dlhis.Canteen/Order/Request/BalanceRecordAnalysisByShiftRequest.cs
@@ -1,29 +1,7 @@
-using System.ComponentModel.DataAnnotations;
-using Kurisu.AspNetCore.CustomClass;
-using Kurisu.AspNetCore.DataAccess.Dto;
+using Dlhis.Canteen.Order.Request.Common;
namespace Dlhis.Canteen.Order.Request;
-public class BalanceRecordAnalysisByShiftRequest : PageDto, IValidatableObject
+public class BalanceRecordAnalysisByShiftRequest : SummaryCommonDto
{
- ///
- /// 营业点
- ///
- public List BusinessPlaceCodes { get; set; }
-
- ///
- ///
- ///
- public DateTimePeriod SearchDateTimePeriod { get; set; }
-
- ///
- public IEnumerable Validate(ValidationContext validationContext)
- {
- if (SearchDateTimePeriod is { End: not null })
- {
- SearchDateTimePeriod.End = SearchDateTimePeriod.End.Value.AddDays(1).AddSeconds(-1);
- }
-
- yield break;
- }
}
\ No newline at end of file
diff --git a/Src/Dlhis.Canteen/Order/Request/BalanceRecordAnalysisRequest.cs b/Src/Dlhis.Canteen/Order/Request/BalanceRecordAnalysisRequest.cs
index 6995147b..8b02b7a6 100644
--- a/Src/Dlhis.Canteen/Order/Request/BalanceRecordAnalysisRequest.cs
+++ b/Src/Dlhis.Canteen/Order/Request/BalanceRecordAnalysisRequest.cs
@@ -1,25 +1,11 @@
-using System.ComponentModel.DataAnnotations;
-using Kurisu.AspNetCore.CustomClass;
-using Kurisu.AspNetCore.DataAccess.Dto;
+using Dlhis.Canteen.Order.Request.Common;
namespace Dlhis.Canteen.Order.Request;
-public class BalanceRecordAnalysisRequest : PageDto, IValidatableObject
+public class BalanceRecordAnalysisRequest : SummaryCommonDto
{
- public DateTimePeriod SearchDateTimePeriod { get; set; }
-
///
/// 营业点
///
public Guid? BusinessPlaceCode { get; set; }
-
- public IEnumerable Validate(ValidationContext validationContext)
- {
- if (SearchDateTimePeriod is { End: not null })
- {
- SearchDateTimePeriod.End = SearchDateTimePeriod.End.Value.AddDays(1).AddSeconds(-1);
- }
-
- yield break;
- }
}
\ No newline at end of file
diff --git a/Src/Dlhis.Canteen/Order/Request/BalanceRecordEMealVoucherPageRequest.cs b/Src/Dlhis.Canteen/Order/Request/BalanceRecordEMealVoucherPageRequest.cs
new file mode 100644
index 00000000..f4d717f6
--- /dev/null
+++ b/Src/Dlhis.Canteen/Order/Request/BalanceRecordEMealVoucherPageRequest.cs
@@ -0,0 +1,9 @@
+using Kurisu.AspNetCore.CustomClass;
+using Kurisu.AspNetCore.DataAccess.Dto;
+
+namespace Dlhis.Canteen.Order.Request;
+
+public class BalanceRecordEMealVoucherPageRequest : PageDto
+{
+ public DateTimePeriod SearchDateTimePeriod { get; set; }
+}
\ No newline at end of file
diff --git a/Src/Dlhis.Canteen/Order/Request/Common/SummaryCommonDto.cs b/Src/Dlhis.Canteen/Order/Request/Common/SummaryCommonDto.cs
new file mode 100644
index 00000000..7b9b41f5
--- /dev/null
+++ b/Src/Dlhis.Canteen/Order/Request/Common/SummaryCommonDto.cs
@@ -0,0 +1,28 @@
+using System.ComponentModel.DataAnnotations;
+using Kurisu.AspNetCore.CustomClass;
+using Kurisu.AspNetCore.DataAccess.Dto;
+
+namespace Dlhis.Canteen.Order.Request.Common;
+
+public class SummaryCommonDto : PageDto, IValidatableObject
+{
+ ///
+ /// 营业点
+ ///
+ public List BusinessPlaceCodes { get; set; }
+
+ ///
+ /// 日期范围
+ ///
+ public DateTimePeriod SearchDateTimePeriod { get; set; }
+
+ public IEnumerable Validate(ValidationContext validationContext)
+ {
+ if (SearchDateTimePeriod is { End: not null })
+ {
+ SearchDateTimePeriod.End = SearchDateTimePeriod.End.Value.AddDays(1).AddSeconds(-1);
+ }
+
+ yield break;
+ }
+}
\ No newline at end of file
diff --git a/Src/Dlhis.Canteen/Order/Response/BalanceRecordAnalysisByCostResponse.cs b/Src/Dlhis.Canteen/Order/Response/BalanceRecordAnalysisByCostResponse.cs
deleted file mode 100644
index d9c97fa5..00000000
--- a/Src/Dlhis.Canteen/Order/Response/BalanceRecordAnalysisByCostResponse.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-namespace Dlhis.Canteen.Order.Response;
-
-public class BalanceRecordAnalysisByCostResponse
-{
-
-}
\ No newline at end of file
diff --git a/Src/Dlhis.Canteen/Order/Response/BalanceRecordAnalysisDepartmentResponse.cs b/Src/Dlhis.Canteen/Order/Response/BalanceRecordAnalysisDepartmentResponse.cs
new file mode 100644
index 00000000..7692aa61
--- /dev/null
+++ b/Src/Dlhis.Canteen/Order/Response/BalanceRecordAnalysisDepartmentResponse.cs
@@ -0,0 +1,5 @@
+namespace Dlhis.Canteen.Order.Response;
+
+public class BalanceRecordAnalysisDepartmentResponse
+{
+}
\ No newline at end of file
diff --git a/Src/Dlhis.Canteen/Order/Response/BalanceRecordEMealVoucherResponse.cs b/Src/Dlhis.Canteen/Order/Response/BalanceRecordEMealVoucherResponse.cs
new file mode 100644
index 00000000..6dc5dd5e
--- /dev/null
+++ b/Src/Dlhis.Canteen/Order/Response/BalanceRecordEMealVoucherResponse.cs
@@ -0,0 +1,129 @@
+using Dlhis.Entity.Canteen.Enums;
+using Kurisu.AspNetCore.Utils.Converters;
+using Kurisu.AspNetCore.Utils.Extensions;
+using Newtonsoft.Json;
+
+namespace Dlhis.Canteen.Order.Response;
+
+public class BalanceRecordEMealVoucherResponse
+{
+ public long Id { get; set; }
+
+ ///
+ /// 流水号
+ ///
+ public string No { get; set; }
+
+ ///
+ /// 档案号/QRCode
+ ///
+ public string UserNo { get; set; }
+
+ ///
+ /// 姓名
+ ///
+ public string Name { get; set; }
+
+ ///
+ /// 学工号
+ ///
+ public string UserCode { get; set; }
+
+ ///
+ /// 部门号
+ ///
+ public string DepartmentNo { get; set; }
+
+ ///
+ /// 部门
+ ///
+ public string DepartmentName { get; set; }
+
+ ///
+ /// 所属成本日期
+ ///
+ [JsonConverter(typeof(ToDateJsonConverter))]
+ public DateTime CostDate { get; set; }
+
+ ///
+ /// 备注
+ ///
+ public string Remark { get; set; }
+
+ ///
+ /// 来源
+ ///
+ public BalanceRecordSourceEnumType Source { get; set; }
+
+ ///
+ /// 消费识别来源
+ ///
+ public string SourceDesc => Source.GetDescription();
+
+ ///
+ /// 收入/支出
+ ///
+ public BalanceRecordTypeEnumType Type { get; set; }
+
+ public string TypeDesc => Type.GetDescription();
+
+ ///
+ /// 金额
+ ///
+ public decimal Amount { get; set; }
+
+ ///
+ /// 营业点
+ ///
+ public string BusinessPlaceName { get; set; }
+
+ ///
+ /// 餐次
+ ///
+ public ShiftEnumType? ShiftType { get; set; }
+
+ ///
+ /// 餐次
+ ///
+ public string ShiftTypeDesc => ShiftType?.GetDescription();
+
+ ///
+ /// 消费机器唯一信息
+ ///
+ public string DeviceInfo { get; set; }
+
+ ///
+ /// 成本中心
+ ///
+ public string CostId { get; set; }
+
+ ///
+ /// 消费者所在基地
+ ///
+ public string OriginTenantId { get; set; }
+
+ ///
+ /// 数据状态
+ ///
+ public BalanceRecordStatusEnumType Status { get; set; }
+
+ ///
+ /// 数据状态描述
+ ///
+ public string StatusDesc => Status.GetDescription();
+
+ ///
+ /// 记录产生时间
+ ///
+ public DateTime CostDateTime { get; set; }
+
+ ///
+ /// 厂区
+ ///
+ public string Factory { get; set; }
+
+ ///
+ /// 人事范围
+ ///
+ public string Werks { get; set; }
+}
\ No newline at end of file
diff --git a/Src/Dlhis.Canteen/Order/Response/BalanceRecordResponse.cs b/Src/Dlhis.Canteen/Order/Response/BalanceRecordResponse.cs
index ac4c6183..ac19cb85 100644
--- a/Src/Dlhis.Canteen/Order/Response/BalanceRecordResponse.cs
+++ b/Src/Dlhis.Canteen/Order/Response/BalanceRecordResponse.cs
@@ -61,6 +61,9 @@ public class BalanceRecordResponse
///
public BalanceRecordSourceEnumType Source { get; set; }
+ ///
+ /// 消费识别来源
+ ///
public string SourceDesc => Source.GetDescription();
///
diff --git a/Src/Dlhis.Canteen/Order/Services/IBalanceSummaryService.cs b/Src/Dlhis.Canteen/Order/Services/IBalanceSummaryService.cs
index 455d7d59..8d970b68 100644
--- a/Src/Dlhis.Canteen/Order/Services/IBalanceSummaryService.cs
+++ b/Src/Dlhis.Canteen/Order/Services/IBalanceSummaryService.cs
@@ -1,4 +1,5 @@
using Dlhis.Canteen.Order.Request;
+using Dlhis.Canteen.Order.Request.Common;
using Dlhis.Canteen.Order.Response;
using Kurisu.AspNetCore.DataAccess.Dto;
@@ -8,7 +9,7 @@ public interface IBalanceSummaryService : IScopeDependency
{
Task BalanceRecordAnalysisAsync(BalanceRecordAnalysisRequest request);
- Task> BalanceRecordAnalysisByCostIdAsync();
+ Task> BalanceRecordAnalysisByCostIdAsync(SummaryCommonDto request);
Task BalanceRecordShiftAnalysisAmountAsync(BalanceRecordAnalysisByShiftRequest request);
diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs
index a83c3107..57b8d488 100644
--- a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs
+++ b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs
@@ -52,12 +52,11 @@ public class BalanceService : IBalanceService
.LeftJoin((record, ga, department) => ga.DepartmentNo == department.No)
.LeftJoin((record, ga, department, bPlace) => record.BusinessPlaceCode == bPlace.Code)
.LeftJoin((record, ga, department, bPlace, order) => record.No == order.No)
- .WhereIF(request.SearchDateTimePeriod?.Start.HasValue == true, record => record.CostDate >= request.SearchDateTimePeriod.Start)
- .WhereIF(request.SearchDateTimePeriod?.End.HasValue == true, record => record.CostDate <= request.SearchDateTimePeriod.End)
- .WhereIF(request.ShiftTypes.IsPresent(), record => request.ShiftTypes.Contains(record.ShiftType))
- .WhereIF(request.Type.HasValue, record => record.Type == request.Type)
.WhereIF(request.Factory.IsPresent(), record => record.TenantId == request.Factory)
- .WhereIF(request.Search.IsPresent(), (record, ga) => ga.Code == request.Search)
+ .WhereIF(request.Type.HasValue, record => record.Type == request.Type)
+ .WhereIF(request.SearchDateTimePeriod.HasValue(), record => record.CostDate >= request.SearchDateTimePeriod.Start && record.CostDate <= request.SearchDateTimePeriod.End)
+ .WhereIF(request.ShiftTypes.IsPresent(), record => request.ShiftTypes.Contains(record.ShiftType))
+ .WhereIF(request.Search.IsPresent(), (record, ga) => ga.Code == request.Search || ga.Name == request.Search)
.OrderBy(record => record.CreateTime, OrderByType.Desc)
.Select((record, ga, department, bPlace, order) => new BalanceRecordResponse
{
@@ -82,7 +81,7 @@ public class BalanceService : IBalanceService
Factory = record.TenantId,
ShiftType = record.ShiftType,
Remark = record.Remark,
- Werks = ga.Werks
+ Werks = record.Werks
})
.ToPageListAsync(request);
@@ -346,12 +345,11 @@ public class BalanceService : IBalanceService
.LeftJoin((record, ga) => record.UserNo == ga.No)
.LeftJoin((record, ga, department) => ga.DepartmentNo == department.No)
.LeftJoin((record, ga, department, bPlace) => record.BusinessPlaceCode == bPlace.Code)
- .Where(record => record.Type == BalanceRecordTypeEnumType.Out)
- .Where(record => record.Status == BalanceRecordStatusEnumType.Valid)
- .WhereIF(request.SearchDateTimePeriod?.Start.HasValue == true, record => record.CostDate >= request.SearchDateTimePeriod.Start)
- .WhereIF(request.SearchDateTimePeriod?.End.HasValue == true, record => record.CostDate <= request.SearchDateTimePeriod.End)
+ .Where((record, ga) => record.UserCode == jinkoCode)
+ .Where(record => record.Status == BalanceRecordStatusEnumType.Valid && record.Type == BalanceRecordTypeEnumType.Out)
+ .Where(record => record.Source != BalanceRecordSourceEnumType.EMealVoucher) //不展示电子餐券信息
+ .WhereIF(request.SearchDateTimePeriod.HasValue(), record => record.CostDate >= request.SearchDateTimePeriod.Start && record.CostDate <= request.SearchDateTimePeriod.End)
.WhereIF(request.ApplicationType.HasValue, record => record.ApplicationType == request.ApplicationType)
- .Where((record, ga) => ga.Code == jinkoCode)
.OrderBy(record => record.CostDateTime)
.Select((record, ga, department, bPlace) => new BalanceRecordUserPageResponse
{
@@ -372,8 +370,8 @@ public class BalanceService : IBalanceService
var monthSum = await _dbContext.Queryable()
.Where(x => x.CostDateTime >= monthStart && x.CostDateTime <= monthEnd)
- .Where(x => x.Type == BalanceRecordTypeEnumType.Out)
- .Where(x => x.Status == BalanceRecordStatusEnumType.Valid)
+ .Where(x => x.Status == BalanceRecordStatusEnumType.Valid && x.Type == BalanceRecordTypeEnumType.Out)
+ .Where(x => x.Source != BalanceRecordSourceEnumType.EMealVoucher)
.Where(x => x.UserCode == jinkoCode)
.SumAsync(x => SqlFunc.Abs(x.Amount));
diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceSummaryService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceSummaryService.cs
index d644725f..96f9dfd7 100644
--- a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceSummaryService.cs
+++ b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceSummaryService.cs
@@ -1,6 +1,7 @@
using System.Reflection;
using Dlhis.Canteen.Order.Dto;
using Dlhis.Canteen.Order.Request;
+using Dlhis.Canteen.Order.Request.Common;
using Dlhis.Canteen.Order.Response;
using Dlhis.Entity.Canteen.Entities;
using Dlhis.Entity.Canteen.Enums;
@@ -23,12 +24,13 @@ public class BalanceSummaryService : IBalanceSummaryService
public async Task BalanceRecordAnalysisAsync(BalanceRecordAnalysisRequest request)
{
- var list = await _dbContext.Queryable()
- .WhereIF(request.SearchDateTimePeriod.HasValue(),
- record => record.CostDate >= request.SearchDateTimePeriod.Start && record.CostDate <= request.SearchDateTimePeriod.End)
- .WhereIF(request.BusinessPlaceCode.HasValue, record => record.BusinessPlaceCode == request.BusinessPlaceCode)
- .Where(record => record.Type == BalanceRecordTypeEnumType.Out && record.Status == BalanceRecordStatusEnumType.Valid)
- .ToListAsync();
+ if (request.BusinessPlaceCode.HasValue)
+ {
+ request.BusinessPlaceCodes = new List { request.BusinessPlaceCode.Value };
+ }
+
+ var queryable = GetQueryable(request);
+ var list =await queryable.ToListAsync();
var sum = list.Sum(x => Math.Abs(x.Amount));
@@ -59,42 +61,16 @@ public class BalanceSummaryService : IBalanceSummaryService
}
- public async Task> BalanceRecordAnalysisByCostIdAsync()
+ public async Task> BalanceRecordAnalysisByCostIdAsync(SummaryCommonDto request)
{
- var list = await _dbContext.Queryable()
- // .WhereIF(request.SearchDateTimePeriod?.Start.HasValue == true && request.SearchDateTimePeriod?.End.HasValue == true,
- // record => record.CostDate >= request.SearchDateTimePeriod.Start && record.CostDate <= request.SearchDateTimePeriod.End)
- //.WhereIF(request.BusinessPlaceCode.HasValue, record => record.BusinessPlaceCode == request.BusinessPlaceCode)
- .Where(record => record.Type == BalanceRecordTypeEnumType.Out && record.Status == BalanceRecordStatusEnumType.Valid)
- .ToListAsync();
-
- var shifts = Enum.GetValues().ToList();
- var page = list.GroupBy(record => record.CostDate.Date).Select(grp =>
- {
- return new BalanceRecordAnalysisResponse
- {
- Date = DateOnly.FromDateTime(grp.Key),
- Items = shifts.Select(shift =>
- {
- return new KeyValueDto
- {
- Key = shift,
- Value = grp.Where(x => x.ShiftType == shift).Select(x => x.UserNo).Distinct().Count()
- };
- }).ToList(),
- Total = grp.Where(x => x.CostDate == grp.Key).Select(x => x.UserNo).Distinct().Count()
- };
- }).OrderByDescending(x => x.Date);
+ // var queryable = GetQueryable(request);
return null;
}
public async Task BalanceRecordShiftAnalysisAmountAsync(BalanceRecordAnalysisByShiftRequest request)
{
- var queryable = _dbContext.Queryable()
- .Where(x => x.Status == BalanceRecordStatusEnumType.Valid && x.Type == BalanceRecordTypeEnumType.Out)
- .WhereIF(request.SearchDateTimePeriod.HasValue(), x => x.CostDate >= request.SearchDateTimePeriod.Start && x.CostDate <= request.SearchDateTimePeriod.End)
- .WhereIF(request.BusinessPlaceCodes?.Any() == true, x => request.BusinessPlaceCodes.Contains(x.BusinessPlaceCode.Value));
+ var queryable = GetQueryable(request);
var amount = await queryable.SumAsync(x => SqlFunc.Abs(x.Amount));
@@ -127,10 +103,7 @@ public class BalanceSummaryService : IBalanceSummaryService
public async Task BalanceRecordShiftAnalysisAmountAndCountAsync(BalanceRecordAnalysisByShiftRequest request)
{
- var queryable = _dbContext.Queryable()
- .Where(x => x.Status == BalanceRecordStatusEnumType.Valid && x.Type == BalanceRecordTypeEnumType.Out)
- .WhereIF(request.SearchDateTimePeriod.HasValue(), x => x.CostDate >= request.SearchDateTimePeriod.Start && x.CostDate <= request.SearchDateTimePeriod.End)
- .WhereIF(request.BusinessPlaceCodes?.Any() == true, x => request.BusinessPlaceCodes.Contains(x.BusinessPlaceCode.Value));
+ var queryable = GetQueryable(request);
var amount = await queryable.SumAsync(x => SqlFunc.Abs(x.Amount));
@@ -149,4 +122,19 @@ public class BalanceSummaryService : IBalanceSummaryService
}).ToList()
};
}
+
+ //**************************************************************help method***********************************************************************
+
+ ///
+ /// 获取默认查询queryable
+ ///
+ ///
+ ///
+ private ISugarQueryable GetQueryable(SummaryCommonDto request)
+ {
+ return _dbContext.Queryable()
+ .Where(x => x.Status == BalanceRecordStatusEnumType.Valid && x.Type == BalanceRecordTypeEnumType.Out) //有效,消费数据
+ .WhereIF(request.SearchDateTimePeriod.HasValue(), x => x.CostDate >= request.SearchDateTimePeriod.Start && x.CostDate <= request.SearchDateTimePeriod.End) //成本日期
+ .WhereIF(request.BusinessPlaceCodes?.Any() == true, x => request.BusinessPlaceCodes.Contains(x.BusinessPlaceCode.Value)); //营业点
+ }
}
\ No newline at end of file
diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs
index 75c7eead..ef57c7d0 100644
--- a/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs
+++ b/Src/Dlhis.Canteen/Order/Services/Implements/OrderService.cs
@@ -410,40 +410,9 @@ public class OrderService : BaseOrderService, IOrderService
///
private async Task ConsumeAsync(ConsumeRequest request, GainfoEntity gainfo)
{
- var registry = await DbContext.Queryable().Where(x => x.DeviceUniqueNo == request.DeviceUniqueNo).SingleAsync();
- registry.ThrowIfNull("设备尚未登记");
+ var checkData = await PreCheckAsync(request.DeviceUniqueNo, request.CostDateTime);
- var device = await DbContext.Queryable().Where(x => x.UniqueNo == request.DeviceUniqueNo).SingleAsync();
- device.ThrowIfNull("设备尚未登记");
- device.Enable.ThrowIfFalse("设备已被停用");
-
- var businessPlaceInfo = await DbContext.Queryable()
- .LeftJoin((x, sr) => x.Code == sr.PlaceCode)
- .Where(x => x.Code == registry.BusinessPlaceCode)
- .Select((x, sr) => new
- {
- x.Code,
- sr.ShiftCode,
- x.TenantId
- })
- .SingleAsync();
-
- businessPlaceInfo.ThrowIfNull("设备尚未登记营业点");
-
- //获取当前消费餐次
- var shifts = await DbContext.Queryable().Where(x => x.ShiftCode == businessPlaceInfo.ShiftCode).ToListAsync();
- shifts.ThrowIfEmpty("营业点餐次尚未设置");
-
- var shift = shifts.FirstOrDefault(x => new TimePeriod
- {
- Start = x.Start,
- End = x.End
- }.IsPresent(request.CostDateTime));
- shift.ThrowIfNull("非就餐时间,无法消费");
-
- var costDate = await GetCostDateAsync(shift, request.CostDateTime);
-
- (request.Source == BalanceRecordSourceEnumType.QrCode && businessPlaceInfo.TenantId != gainfo.Factory).ThrowIfTrue("禁止跨厂区消费");
+ (request.Source == BalanceRecordSourceEnumType.QrCode && checkData.BusinessPlaceTenantId != gainfo.Factory).ThrowIfTrue("禁止跨厂区消费");
var order = new CanteenOrderEntity
{
@@ -456,30 +425,28 @@ public class OrderService : BaseOrderService, IOrderService
UserNo = gainfo.No,
UserCode = gainfo.Code,
Amount = request.Amount,
- BusinessPlaceCode = businessPlaceInfo?.Code,
- BusinessShiftCode = shift?.ShiftCode,
- ShiftType = shift?.ShiftType,
- CostDate = costDate.Date,
+ BusinessPlaceCode = checkData.BusinessPlaceCode,
+ BusinessShiftCode = checkData.BusinessShiftCode,
+ ShiftType = checkData.Shift.ShiftType,
+ CostDate = checkData.CostDate,
CostId = gainfo.CostId,
DepartmentNo = gainfo.DepartmentNo,
DeviceUniqueNo = request.DeviceUniqueNo,
No = SnowFlakeHelper.Instance.NextId().ToString(),
IsOffline = request.IsOffline,
- IsCostCrossTenant = gainfo.Factory != businessPlaceInfo!.TenantId,
+ IsCostCrossTenant = gainfo.Factory != checkData.BusinessPlaceTenantId,
OriginTenantId = gainfo.Factory,
Werks = gainfo.Werks,
-
- //餐别异常处理
- Status = shift == null ? BalanceRecordStatusEnumType.Doubtful : BalanceRecordStatusEnumType.Valid,
+ Status = BalanceRecordStatusEnumType.Valid,
OrderStatus = CanteenOrderStatusEnumType.Wait,
CostDateTime = request.CostDateTime,
//标识当前消费的基地
- TenantId = businessPlaceInfo.TenantId,
+ TenantId = checkData.BusinessPlaceTenantId
};
var orderId = await DbContext.InsertReturnIdentityAsync(order);
@@ -714,7 +681,7 @@ public class OrderService : BaseOrderService, IOrderService
.Where(x => x.No == no && x.IdNo == idNo).SingleAsync();
(nowDate >= current.Start && nowDate <= current.End).ThrowIfFalse("餐券已过期");
var time = DateTimeOffset.FromUnixTimeMilliseconds(Convert.ToInt64(ts.Reverse().Join(string.Empty))).ToLocalTime().DateTime;
- (time.AddMinutes(60) >= DateTime.Now).ThrowIfFalse("二维码已过期");
+ (time.AddMinutes(60) >= DateTime.Now).ThrowIfFalse("餐券二维码已过期");
var eMealVoucher = await DbContext.Queryable().Where(x => x.No == no).SingleAsync();
diff --git a/Src/Dlhis.Entity/Basic/Entity/OutsourceEntity.cs b/Src/Dlhis.Entity/Basic/Entity/OutsourceEntity.cs
index 094240a7..6a32abc5 100644
--- a/Src/Dlhis.Entity/Basic/Entity/OutsourceEntity.cs
+++ b/Src/Dlhis.Entity/Basic/Entity/OutsourceEntity.cs
@@ -1,36 +1,35 @@
using Kurisu.AspNetCore.DataAccess.SqlSugar;
using SqlSugar;
-namespace Dlhis.Entity.Basic.Entity
+namespace Dlhis.Entity.Basic.Entity;
+
+///
+/// 外包人员
+///
+[SugarTable(TableName = "Outsource", TableDescription = "外包人员")]
+public class OutsourceEntity : SugarBaseEntity
{
///
- /// 外包人员
+ /// 外包人员工号 LS开头
///
- [SugarTable(TableName = "Outsource", TableDescription = "外包人员")]
- public class OutsourceEntity : SugarBaseEntity
- {
- ///
- /// 外包人员工号 LS开头
- ///
- [SugarColumn(IsNullable = false, ColumnDescription = "工号")]
- public string Code { get; set; }
+ [SugarColumn(IsNullable = false, ColumnDescription = "工号")]
+ public string Code { get; set; }
- ///
- /// 供应商
- ///
- [SugarColumn(IsNullable = false, ColumnDescription = "供应商")]
- public string Supplier { get; set; }
+ ///
+ /// 供应商
+ ///
+ [SugarColumn(IsNullable = false, ColumnDescription = "供应商")]
+ public string Supplier { get; set; }
- ///
- /// 对接人员工号
- ///
- [SugarColumn(IsNullable = false, ColumnDescription = "对接人工号")]
- public string SapCode { get; set; }
+ ///
+ /// 对接人员工号
+ ///
+ [SugarColumn(IsNullable = false, ColumnDescription = "对接人工号")]
+ public string SapCode { get; set; }
- ///
- /// 对接人员手机号
- ///
- [SugarColumn(IsNullable = false, ColumnDescription = "对接人手机号")]
- public string SapPhone { get; set; }
- }
+ ///
+ /// 对接人员手机号
+ ///
+ [SugarColumn(IsNullable = false, ColumnDescription = "对接人手机号")]
+ public string SapPhone { get; set; }
}
\ No newline at end of file
diff --git a/Src/Dlhis.Entity/Canteen/Entities/EMealVoucherEntity.cs b/Src/Dlhis.Entity/Canteen/Entities/EMealVoucherEntity.cs
index 7ff544aa..c13e7ed1 100644
--- a/Src/Dlhis.Entity/Canteen/Entities/EMealVoucherEntity.cs
+++ b/Src/Dlhis.Entity/Canteen/Entities/EMealVoucherEntity.cs
@@ -75,4 +75,10 @@ public class EMealVoucherEntity : SugarBaseEntity
///
[SugarColumn(ColumnDescription = "申请日期")]
public DateTime Date { get; set; }
+
+ ///
+ /// 厂区
+ ///
+ [SugarColumn(ColumnDescription = "厂区")]
+ public string Factory { get; set; }
}
\ No newline at end of file
diff --git a/Src/Dlhis.External/EMealVoucher/Services/Implements/EMealVoucherService.cs b/Src/Dlhis.External/EMealVoucher/Services/Implements/EMealVoucherService.cs
index a956a612..817fb5e3 100644
--- a/Src/Dlhis.External/EMealVoucher/Services/Implements/EMealVoucherService.cs
+++ b/Src/Dlhis.External/EMealVoucher/Services/Implements/EMealVoucherService.cs
@@ -1,3 +1,4 @@
+using Dlhis.Entity.Basic.Entity;
using Dlhis.Entity.Canteen.Entities;
using Dlhis.Entity.Canteen.Enums;
using Dlhis.External.EMealVoucher.Request;
@@ -19,6 +20,9 @@ public class EMealVoucherService : IEMealVoucherService
{
(await _dbContext.Queryable().Where(x => x.No == request.No).AnyAsync()).ThrowIfTrue($"{request.No}已存在");
+ var gainfo = await _dbContext.Queryable().Where(x => x.Code == request.Code).SingleAsync();
+ gainfo.ThrowIfNull("申请人不存在");
+
var voucher = new EMealVoucherEntity
{
No = request.No,
@@ -31,7 +35,8 @@ public class EMealVoucherService : IEMealVoucherService
Reason = request.Reason,
Shifts = request.Shifts.Select(x => (ShiftEnumType)x).ToList(),
Date = request.Date,
- Factories = request.Factories
+ Factories = request.Factories,
+ Factory = gainfo.Factory
};
var details = request.Details.Select(x => new EMealVoucherDetailEntity