diff --git a/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs b/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs index 62c05f76..cfc27e75 100644 --- a/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs +++ b/Src/Dlhis.Canteen/Order/Controllers/BalancesController.cs @@ -86,6 +86,18 @@ public class BalancesController : ControllerBase return await _balanceService.RecordPageDetailsAsync(request); } + /// + /// 营业点消费明细导出 + /// + /// + /// + [ExcelResult("营业点消费明细")] + [HttpGet("recordPageDetails/export")] + public async Task> RecordPageDetailsToExportAsync([FromQuery] BalanceRecordPageDetailRequest request) + { + return await _balanceService.RecordPageDetailsToExportAsync(request); + } + /// /// 设备消费记录 /// diff --git a/Src/Dlhis.Canteen/Order/Response/BalanceRecordDetailPageResponse.cs b/Src/Dlhis.Canteen/Order/Response/BalanceRecordDetailPageResponse.cs index ec223cf7..76361944 100644 --- a/Src/Dlhis.Canteen/Order/Response/BalanceRecordDetailPageResponse.cs +++ b/Src/Dlhis.Canteen/Order/Response/BalanceRecordDetailPageResponse.cs @@ -1,5 +1,7 @@ using Dlhis.Entity.Canteen.Enums; +using Dlhis.ExcelHelper; using Kurisu.AspNetCore.DataAccess.Dto; +using Kurisu.AspNetCore.Utils.Converters; using Kurisu.AspNetCore.Utils.Extensions; using Newtonsoft.Json; @@ -40,41 +42,55 @@ public class BalanceRecordDetailPageResponse /// /// 工号 /// + [Excel("工号")] public string UserCode { get; set; } /// /// 名称 /// + [Excel("姓名")] public string UserName { get; set; } /// /// 部门名称 /// + [Excel("部门")] public string DepartmentName { get; set; } /// /// 成本日期 /// + [Excel("成本日期", "yyyy-MM-dd")] + [JsonConverter(typeof(ToDateJsonConverter))] public DateTime CostDate { get; set; } /// /// 消费时间 /// + [Excel("消费时间", "yyyy-MM-dd HH:mm:ss")] public DateTime CostDateTime { get; set; } - /// - /// 备注 - /// - public string Remark { get; set; } - /// /// 消费金额 /// + [Excel("金额", "0.00")] public string Amount => CurrentAmount.ToString("f2"); [JsonIgnore] public decimal CurrentAmount { get; set; } + /// + /// 消费来源 + /// + [Excel("消费来源")] + public string SourceDesc => Source.GetDescription(); + + /// + /// 营业点 + /// + [Excel("营业点")] + public string BusinessPlaceName { get; set; } + /// /// 餐次 /// @@ -83,30 +99,30 @@ public class BalanceRecordDetailPageResponse /// /// 餐次 /// + [Excel("餐次")] public string ShiftTypeDesc => ShiftType?.GetDescription(); /// - /// 营业点 - /// - public string BusinessPlaceName { get; set; } - - /// - /// 扣款方式 + /// 消费来源 /// public BalanceRecordSourceEnumType Source { get; set; } - /// - /// 扣款方式 - /// - public string SourceDesc => Source.GetDescription(); /// /// 厂区 /// + [Excel("厂区")] public string Factory { get; set; } /// /// 人事范围 /// + [Excel("人事范围")] public string Werks { get; set; } + + /// + /// 备注 + /// + [Excel("备注")] + public string Remark { get; set; } } \ No newline at end of file diff --git a/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs b/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs index 00961c61..37fdbcc6 100644 --- a/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs +++ b/Src/Dlhis.Canteen/Order/Services/IBalanceService.cs @@ -32,6 +32,9 @@ public interface IBalanceService : IScopeDependency /// Task RecordPageDetailsAsync(BalanceRecordPageDetailRequest request); + + Task> RecordPageDetailsToExportAsync(BalanceRecordPageDetailRequest request); + Task GetConsumeNumberAsync(); Task ManuallyImportBalanceAndReCalcAsync(List requests); diff --git a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs index 45c01310..6e81c8b6 100644 --- a/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs +++ b/Src/Dlhis.Canteen/Order/Services/Implements/BalanceService.cs @@ -112,7 +112,7 @@ public class BalanceService : IBalanceService /// public async Task> GetPageToExportAsync(BalanceRecordPageRequest request) { - var rows = await _dbContext.Queryable() + var rows = await _dbContext.Queryable() .LeftJoin((record, department) => record.DepartmentNo == department.No) .LeftJoin((record, department, bPlace) => record.BusinessPlaceCode == bPlace.Code) .WhereIF(request.SearchDateTimePeriod.HasValue(), record => record.CostDate >= request.SearchDateTimePeriod.Start && record.CostDate <= request.SearchDateTimePeriod.End) @@ -352,6 +352,61 @@ public class BalanceService : IBalanceService } + public async Task> RecordPageDetailsToExportAsync(BalanceRecordPageDetailRequest request) + { + var myCodes = (await _businessPlacePermissionsApi.GetMyAsync()).Select(x => (Guid?)x.Code).ToList(); + if (request.BusinessplaceCodes.IsPresent()) + { + myCodes = myCodes.Where(x => request.BusinessplaceCodes.Contains(x)).ToList(); + } + + //var myCodes = request.BusinessplaceCodes; + + var queryable = _dbContext.Queryable() + .LeftJoin((record, department) => record.DepartmentNo == department.No) + .LeftJoin((record, department, bPlace) => record.BusinessPlaceCode == bPlace.Code) + .WhereIF(request.SearchDateTimePeriod.HasValue(), record => record.CostDate >= request.SearchDateTimePeriod.Start && record.CostDate <= request.SearchDateTimePeriod.End) + .Where(record => record.Type == BalanceRecordTypeEnumType.Out && record.Status == BalanceRecordStatusEnumType.Valid) + .Where(record => myCodes.Contains(record.BusinessPlaceCode)) + .WhereIF(request.ShiftType.HasValue, record => record.ShiftType == request.ShiftType) + .WhereIF(request.Search.IsPresent(), record => record.UserCode == request.Search || record.Name == request.Search); + + var rows = await queryable + .OrderBy(record => new { CostDate = SqlFunc.Desc(record.CostDate), CostDateTime = SqlFunc.Desc(record.CostDateTime) }) + .Select((record, department, bPlace) => new BalanceRecordDetailPageResponse + { + Id = record.Id, + No = record.No, + CurrentAmount = SqlFunc.Abs(record.Amount), + CostDate = record.CostDate, + UserNo = record.UserNo, + UserCode = record.UserCode, + Source = record.Source, + UserName = record.Name, + DepartmentName = department.Name, + BusinessPlaceName = bPlace.Name, + CostDateTime = record.CostDateTime, + ShiftType = record.ShiftType, + Werks = record.Werks, + Factory = record.TenantId, + Remark = record.Remark, + }) + .ToListAsync(); + + try + { + var tenants = await _tenantApi.GetTenantsInternalAsync(); + rows.ForEach(item => { item.Factory = tenants.FirstOrDefault(x => x.Code == item.Factory)?.Name; }); + } + catch (Exception) + { + //ignore + } + + return rows; + } + + public async Task SupplementBalanceAsync(BalanceSupplementRequest request) { var balanceInfo = await _dbContext.Queryable().Where(x => x.No == request.No).SingleAsync(); diff --git a/Src/Dlhis.Canteen/appsettings.Development.json b/Src/Dlhis.Canteen/appsettings.Development.json index f67d9370..57cbead6 100644 --- a/Src/Dlhis.Canteen/appsettings.Development.json +++ b/Src/Dlhis.Canteen/appsettings.Development.json @@ -19,9 +19,9 @@ }, "SwaggerOptions": { "Enable": true, - "Authority": "https://yikatong.isawesome.cn/oauth2", - "ClientId": "4fb184324eac4180", - "ClientSecret": "8ac8f235152f1524", + "Authority": "http://localhost:5000", + "ClientId": "98958aa485d38412", + "ClientSecret": "52589e011f02fe19", "Scopes": { "openid": "openid", "profile": "profile", @@ -29,8 +29,8 @@ } }, "IdentityServerOptions": { - "Authority": "https://yikatong.isawesome.cn/oauth2", - "RequireHttpsMetadata": true, + "Authority": "http://localhost:5000", + "RequireHttpsMetadata": false, "Issuer": "identity.isawesome.cn", "Audience": "", "Pat": { diff --git a/Src/Dlhis.Canteen/appsettings.json b/Src/Dlhis.Canteen/appsettings.json index 418176ae..cfc8b763 100644 --- a/Src/Dlhis.Canteen/appsettings.json +++ b/Src/Dlhis.Canteen/appsettings.json @@ -45,7 +45,7 @@ } }, "RedisOptions": { - "ConnectionString": "192.168.199.30:30115,defaultDatabase=1,password=dlhis123" + "ConnectionString": "192.168.199.124:6379,defaultDatabase=1,password=dlhis123" }, "Serilog": { "MinimumLevel": {