diff --git a/Src/Dlhis.Basic/BusinessShift/Services/Implements/BusinessPlaceShiftService.cs b/Src/Dlhis.Basic/BusinessShift/Services/Implements/BusinessPlaceShiftService.cs index 11aeaab8..c9231a48 100644 --- a/Src/Dlhis.Basic/BusinessShift/Services/Implements/BusinessPlaceShiftService.cs +++ b/Src/Dlhis.Basic/BusinessShift/Services/Implements/BusinessPlaceShiftService.cs @@ -12,7 +12,6 @@ using Kurisu.Core.Result; using Kurisu.SqlSugar.Extensions; using Kurisu.SqlSugar.Services; using Mapster; -using System.Collections.Generic; namespace Dlhis.Basic.BusinessShift.Services.Implements; @@ -241,7 +240,6 @@ public class BusinessPlaceShiftService : IBusinessPlaceShiftService foreach (var item in registries) { item.BusinessPlaceCode = request.PlaceCode; - item.BusinessPlaceCustomCode = place.CustomCode; } await _dbContext.UpdateAsync(registries); diff --git a/Src/Dlhis.Basic/BusinessShift/TimePeriodExtensions.cs b/Src/Dlhis.Basic/BusinessShift/TimePeriodExtensions.cs index 15d4c69d..8c371613 100644 --- a/Src/Dlhis.Basic/BusinessShift/TimePeriodExtensions.cs +++ b/Src/Dlhis.Basic/BusinessShift/TimePeriodExtensions.cs @@ -38,36 +38,4 @@ public static class TimePeriodExtensions } } } - - - public static bool IsPresent1(this TimePeriod period, DateTime dateTime) - { - DateTime start; - DateTime end; - - if (period.IsCrossDay()) - { - var currentStart = DateTime.Today.Add(period.Start.Value.ToTimeSpan()); - var endOfDay = DateTime.Today.AddHours(23).AddMinutes(59).AddSeconds(59); - - if (dateTime >= currentStart && dateTime <= endOfDay) - { - start = DateTime.Today.Add(period.Start.Value.ToTimeSpan()); - end = DateTime.Today.AddDays(1).Add(period.End.Value.ToTimeSpan()); - } - else - { - //第二天 - start = DateTime.Today.AddDays(-1).Add(period.Start.Value.ToTimeSpan()); - end = DateTime.Today.Add(period.End.Value.ToTimeSpan()); - } - } - else - { - start = DateTime.Today.Add(period.Start.Value.ToTimeSpan()); - end = DateTime.Today.Add(period.End.Value.ToTimeSpan()); - } - - return dateTime >= start && dateTime <= end; - } } diff --git a/Src/Dlhis.Basic/Device/Controllers/DeviceGroupsController.cs b/Src/Dlhis.Basic/Device/Controllers/DeviceGroupsController.cs index b3b849cd..8781919a 100644 --- a/Src/Dlhis.Basic/Device/Controllers/DeviceGroupsController.cs +++ b/Src/Dlhis.Basic/Device/Controllers/DeviceGroupsController.cs @@ -3,7 +3,6 @@ using Dlhis.Basic.Device.Response; using Dlhis.Basic.Device.Services; using Dlhis.Entity.Device.Enums; using Kurisu.AspNetCore.DataAccess.SqlSugar.Aop; -using Kurisu.Core.DataAccess.Dto; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; diff --git a/Src/Dlhis.Basic/Device/Controllers/DevicesController.cs b/Src/Dlhis.Basic/Device/Controllers/DevicesController.cs index 9f525254..11e3f0f2 100644 --- a/Src/Dlhis.Basic/Device/Controllers/DevicesController.cs +++ b/Src/Dlhis.Basic/Device/Controllers/DevicesController.cs @@ -216,9 +216,9 @@ public class DevicesController : ControllerBase /// /// /// - [HttpPost("bulkUploads")] - public async Task> BulkUploadsAsync(ImportListRequest request) + [HttpPost("import")] + public async Task Import(List request) { - return await _deviceService.BulkUploadsAsync(request); + await _deviceService.ImportAsync(request); } } diff --git a/Src/Dlhis.Basic/Device/Request/BulkUploadsRequest.cs b/Src/Dlhis.Basic/Device/Request/BulkUploadsRequest.cs deleted file mode 100644 index a0ff5fb0..00000000 --- a/Src/Dlhis.Basic/Device/Request/BulkUploadsRequest.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace Dlhis.Basic.Device.Request -{ - public class BulkUploadsRequest - { - /// - /// 设备信息文件 - /// - public IFormFile FormFile { get; set; } - } -} diff --git a/Src/Dlhis.Basic/Device/Request/DeviceImportRequest.cs b/Src/Dlhis.Basic/Device/Request/DeviceImportRequest.cs new file mode 100644 index 00000000..3eb9e3a0 --- /dev/null +++ b/Src/Dlhis.Basic/Device/Request/DeviceImportRequest.cs @@ -0,0 +1,9 @@ +namespace Dlhis.Basic.Device.Request; + +public class DeviceImportRequest : DeviceSaveRequest +{ + /// + /// 营业点code + /// + public Guid? BusinessPlaceCode { get; set; } +} diff --git a/Src/Dlhis.Basic/Device/Request/ImportDeviceSaveRequest.cs b/Src/Dlhis.Basic/Device/Request/ImportDeviceSaveRequest.cs deleted file mode 100644 index 3db51eb0..00000000 --- a/Src/Dlhis.Basic/Device/Request/ImportDeviceSaveRequest.cs +++ /dev/null @@ -1,73 +0,0 @@ -using Dlhis.Entity.Device.Enums; -using System.ComponentModel.DataAnnotations; - -namespace Dlhis.Basic.Device.Request -{ - public class ImportDeviceSaveRequest - { - /// - /// 设备唯一号 - /// - public string UniqueNo { get; set; } - - /// - /// 模板code - /// - public Guid TemplateCode { get; set; } - - /// - /// 供应商信息 - /// - public string Supplier { get; set; } - - /// - /// 设备功能 - /// - public List Funcs { get; set; } - - /// - /// 设备类型 DeviceTypeEnumType - /// - public DeviceTypeEnumType Type { get; set; } - - /// - /// 心跳间隔 - /// - public int HeartbeatInterval { get; set; } = 0; - - /// - /// 部署点 - /// - public string DeployPlace { get; set; } - - /// - /// 部署坐标 - /// - public string DeployPosition { get; set; } - - /// - /// 部署方向 - /// - public string DeployDirection { get; set; } - - /// - /// 连接信息 - /// - public string ConnectionInfo { get; set; } - - /// - /// 是否启用 - /// - public bool Enable { get; set; } = false; - - /// - /// 是否作为考勤设备 - /// - public bool AsAttendance { get; set; } = false; - - /// - /// 营业点code - /// - public Guid? PlaceeCode { get; set; } - } -} diff --git a/Src/Dlhis.Basic/Device/Request/ImportListRequest.cs b/Src/Dlhis.Basic/Device/Request/ImportListRequest.cs deleted file mode 100644 index e942004c..00000000 --- a/Src/Dlhis.Basic/Device/Request/ImportListRequest.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Dlhis.Basic.Device.Request -{ - public class ImportListRequest - { - public List Imports { get; set; } - } -} diff --git a/Src/Dlhis.Basic/Device/Services/IDeviceService.cs b/Src/Dlhis.Basic/Device/Services/IDeviceService.cs index 479aa008..b551ee6a 100644 --- a/Src/Dlhis.Basic/Device/Services/IDeviceService.cs +++ b/Src/Dlhis.Basic/Device/Services/IDeviceService.cs @@ -27,7 +27,7 @@ public interface IDeviceService : IScopeDependency Task> GetRecentNumbersAsync(); - Task> BulkUploadsAsync(ImportListRequest request); + Task ImportAsync(List request); } diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DeviceConnectService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DeviceConnectService.cs index 78ed4376..85b68b72 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DeviceConnectService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DeviceConnectService.cs @@ -39,7 +39,6 @@ public class DeviceConnectService : IDeviceConnectService LastHeartbeatTime = DateTime.Now, RegisterTime = DateTime.Now, BusinessPlaceCode = businessPlace?.Code, - BusinessPlaceCustomCode = businessPlace?.CustomCode, TenantId = device.TenantId, CreatedBy = 1, CreateTime = DateTime.Now, @@ -73,18 +72,11 @@ public class DeviceConnectService : IDeviceConnectService if (request.BusinessPlaceCode.HasValue) { var businessPlace = await _dbContext.Queryable().Where(x => x.Code == request.BusinessPlaceCode).FirstAsync(); - businessPlace.ThrowIfNull("营业点不存在,无法设置到设备注册信息中"); + businessPlace.ThrowIfNull("营业点不存在,无法设置到设备注册信息中"); + } - //更新营业点信息 - registry.BusinessPlaceCode = businessPlace.Code; - registry.BusinessPlaceCustomCode = businessPlace.CustomCode; - } - else - { - //更新营业点信息 - registry.BusinessPlaceCode = null; - registry.BusinessPlaceCustomCode = null; - } + //更新营业点信息 + registry.BusinessPlaceCode = request.BusinessPlaceCode; await _dbContext.UpdateAsync(registry); } diff --git a/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs b/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs index c75a2f15..1fa3645c 100644 --- a/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs +++ b/Src/Dlhis.Basic/Device/Services/Implements/DeviceService.cs @@ -1,4 +1,5 @@ -using Dlhis.Basic.Device.Request; +using System.Diagnostics; +using Dlhis.Basic.Device.Request; using Dlhis.Basic.Device.Response; using Dlhis.Entity.Basic.Entity; using Dlhis.Entity.Canteen.Entities; @@ -103,7 +104,6 @@ public class DeviceService : IDeviceService LastHeartbeatTime = DateTime.Now, RegisterTime = DateTime.Now, BusinessPlaceCode = null, - BusinessPlaceCustomCode = null, }; await _dbContext.InsertAsync(registry); @@ -137,92 +137,42 @@ public class DeviceService : IDeviceService /// /// /// - public async Task> BulkUploadsAsync(ImportListRequest request) + public async Task ImportAsync(List request) { - true.ThrowIfTrue("设备导入功能暂时停用."); + var businessPlaces = await _dbContext.Queryable().ToListAsync(); - var errs = new List(); - var lst = request.Imports; - var places = await _dbContext.Queryable().ToListAsync(); - - for (int i = 0; i < lst.Count; i++) + var message = new List(); + await _dbContext.Client.Ado.BeginTranAsync(); + try { - var form = lst[i]; - if (form.UniqueNo.IsEmpty()) + for (int i = 0; i < request.Count; i++) { - errs.Add($"第{i + 1}条的第一列的设备唯一码不能缺少!"); - continue; - } - if (form.PlaceeCode != null) - { - var place = places.Where(x => x.Code == form.PlaceeCode).FirstOrDefault(); - if (place == null) + var row = i + 1; + try { - errs.Add($"该设备{form.UniqueNo}配置的营业点营业点不存在!"); - continue; + var item = request[i]; + await SaveAsync(item); + + var registry = await _dbContext.Queryable().Where(x => x.DeviceUniqueNo == item.UniqueNo).FirstAsync(); + businessPlaces.Any(x => x.Code == item.BusinessPlaceCode).ThrowIfFalse("营业点不存在"); + registry.BusinessPlaceCode = item.BusinessPlaceCode; + await _dbContext.UpdateAsync(registry); + } + catch (Exception ex) + { + message.Add($"第{row}列:{ex.Message}"); } } - //插入 - var exists = await _dbContext.Queryable().Where(x => x.UniqueNo == form.UniqueNo) - .AnyAsync(); - if (exists) - { - errs.Add($"设备唯一号{form.UniqueNo}已经存在!"); - continue; - } - var entity = await _dbContext.Queryable().Where(x => x.Code == form.TemplateCode).FirstAsync(); - if (entity == null) - { - errs.Add($"设备{form.UniqueNo}配置的模板{form.TemplateCode}不存在!"); - continue; - } - var template = await _dbContext.Queryable().Where(x => x.Code == form.TemplateCode).FirstAsync(); - - var templateJobj = JObject.Parse(template.Template); - var jobj = JObject.Parse(form.ConnectionInfo); - if (templateJobj.Count != jobj.Count) - { - errs.Add($"设备{form.UniqueNo}的连接参数字段数与模板不一致!"); - continue; - } - var a = false; - foreach (var item in templateJobj) - { - if (!jobj.ContainsKey(item.Key)) - { - errs.Add($"设备{form.UniqueNo}的连接参数需要和模板一致.缺失{item.Key}!"); - a = true; - } - } - if (a) - { - continue; - } - - var saveEntity = form.Adapt(); - saveEntity.Code = Guid.NewGuid(); - await _dbContext.InsertAsync(saveEntity); - //保存注册信息 - var regis = await _dbContext.Queryable() - .Where(x => x.DeviceUniqueNo == form.UniqueNo) - .FirstAsync(); - if (regis == null) - { - var custCode = places.Where(x => x.Code == form.PlaceeCode).Select(x => x.CustomCode).FirstOrDefault(); - regis = new DeviceRegistryEntity - { - DeviceUniqueNo = form.UniqueNo, - LastHeartbeatTime = DateTime.Now, - RegisterTime = DateTime.Now, - BusinessPlaceCode = form.PlaceeCode, - BusinessPlaceCustomCode = custCode - }; - await _dbContext.InsertAsync(regis); - } + message.ThrowIfExists(message.Join("\r\n")); + await _dbContext.Client.Ado.CommitTranAsync(); + } + catch + { + await _dbContext.Client.Ado.RollbackTranAsync(); + throw; } - return errs; } //******************************************************** help methods ********************************************************** diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoPermissionService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoPermissionService.cs index 1d8590d4..c3657692 100644 --- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoPermissionService.cs +++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoPermissionService.cs @@ -47,12 +47,12 @@ public class GainfoPermissionService : IGainfoPermissionService return await _dbContext.Queryable() .LeftJoin((x, dr) => x.UniqueNo == dr.DeviceUniqueNo) .LeftJoin((x, dr, place) => dr.BusinessPlaceCode == place.Code) - .LeftJoin((x, dr, place, ps) => x.Code == ps.PlaceCode) - .LeftJoin((x, dr, place, ps, s) => s.Code == ps.ShiftCode) + .LeftJoin((x, dr, place, ps) => x.Code == ps.PlaceCode) + .LeftJoin((x, dr, place, ps, s) => s.Code == ps.ShiftCode) .Where(x => x.Type == DeviceTypeEnumType.Meal) .Where(x => deviceCodes.Contains(x.Code)) - .Where((x, dr) => !string.IsNullOrEmpty(dr.BusinessPlaceCustomCode)) - .Select((x, dr, place, ps, s) => new BusinessPlaceResponse + .Where((x, dr) => dr.BusinessPlaceCode.HasValue) + .Select((x, dr, place, ps, s) => new BusinessPlaceResponse { Id = place.Id, Code = place.Code, diff --git a/Src/Dlhis.Canteen/Order/TimePeriodExtensions.cs b/Src/Dlhis.Canteen/Order/TimePeriodExtensions.cs index 39b402b4..6c09d10e 100644 --- a/Src/Dlhis.Canteen/Order/TimePeriodExtensions.cs +++ b/Src/Dlhis.Canteen/Order/TimePeriodExtensions.cs @@ -15,17 +15,19 @@ public static class TimePeriodExtensions if (period.IsCrossDay()) { + //period = [22:00:00,03:00:00] var currentStart = DateTime.Today.Add(period.Start.Value.ToTimeSpan()); - var endOfDay = DateTime.Today.AddHours(23).AddMinutes(59).AddSeconds(59); + var endOfDay = DateTime.Today.AddDays(1).AddSeconds(-1); + //assume is left range . then currentStart is 2024-04-16 22:00:00 and endOfDay is 2024-04-16 23:59:59 if (dateTime >= currentStart && dateTime <= endOfDay) { - start = DateTime.Today.Add(period.Start.Value.ToTimeSpan()); - end = DateTime.Today.AddDays(1).Add(period.End.Value.ToTimeSpan()); + start = currentStart; //2024-04-16 22:00:00 + end = DateTime.Today.AddDays(1).Add(period.End.Value.ToTimeSpan());//2024-04-17 03:00:00 } else { - //第二天 + start = DateTime.Today.AddDays(-1).Add(period.Start.Value.ToTimeSpan()); end = DateTime.Today.Add(period.End.Value.ToTimeSpan()); } diff --git a/Src/Dlhis.Entity/Device/Entities/DeviceRegistryEntity.cs b/Src/Dlhis.Entity/Device/Entities/DeviceRegistryEntity.cs index 4d45f3ef..f8ee249b 100644 --- a/Src/Dlhis.Entity/Device/Entities/DeviceRegistryEntity.cs +++ b/Src/Dlhis.Entity/Device/Entities/DeviceRegistryEntity.cs @@ -34,11 +34,5 @@ public class DeviceRegistryEntity : SugarBaseEntity, ITenantId [SugarColumn(IsNullable = true, ColumnDescription = "营业点code")] public Guid? BusinessPlaceCode { get; set; } - /// - /// 营业点手工号(可为空) - /// - [SugarColumn(IsNullable = true, ColumnDescription = "营业点手工号")] - public string BusinessPlaceCustomCode { get; set; } - public string TenantId { get; set; } }