diff --git a/SafeCampus.API/SafeCampus.Application/Const/ApplicationConst.cs b/SafeCampus.API/SafeCampus.Application/Const/ApplicationConst.cs index 868984b..9e884dc 100644 --- a/SafeCampus.API/SafeCampus.Application/Const/ApplicationConst.cs +++ b/SafeCampus.API/SafeCampus.Application/Const/ApplicationConst.cs @@ -16,4 +16,20 @@ public class ApplicationConst public const string BIZ_POS = "岗位"; #endregion 别称 + + #region 学校基础摄像头分组配置 + /// + /// 图书馆分组id + /// + public const long TSG = 583660006621253; + /// + /// 食堂分组id + /// + public const long ST = 583659984986181; + /// + /// 学校大门分组id + /// + public const long XXDM = 583659952070725; + + #endregion } diff --git a/SafeCampus.API/SafeCampus.Application/SafeCampus.Application.xml b/SafeCampus.API/SafeCampus.Application/SafeCampus.Application.xml index 6a60cc3..9b212c2 100644 --- a/SafeCampus.API/SafeCampus.Application/SafeCampus.Application.xml +++ b/SafeCampus.API/SafeCampus.Application/SafeCampus.Application.xml @@ -14,6 +14,21 @@ 岗位 + + + 图书馆分组id + + + + + 食堂分组id + + + + + 学校大门分组id + + 深象智能对接实现 @@ -807,6 +822,21 @@ 人员id + + + 关联底库id 如果为空,表示该人员未匹配到底库 + + + + + 人员id + + + + + 所属点名任务 + + 添加点名记录 @@ -1259,6 +1289,11 @@ 院系id + + + 排序 + + 专业名称 @@ -1622,7 +1657,7 @@ - + 获取底库列表 @@ -1888,6 +1923,11 @@ 班级id(不是必填) + + + 人员id + + 事件发生时间开始 @@ -1903,6 +1943,11 @@ 摄像头id + + + 摄像头ids(不是必填) + + 预警处理状态 diff --git a/SafeCampus.API/SafeCampus.Application/Services/Business/ClassRoomCallService/ClassRoomCallService.cs b/SafeCampus.API/SafeCampus.Application/Services/Business/ClassRoomCallService/ClassRoomCallService.cs index 4706deb..3e8cc2d 100644 --- a/SafeCampus.API/SafeCampus.Application/Services/Business/ClassRoomCallService/ClassRoomCallService.cs +++ b/SafeCampus.API/SafeCampus.Application/Services/Business/ClassRoomCallService/ClassRoomCallService.cs @@ -1,4 +1,6 @@ -namespace SafeCampus.Application.Services.Business.ClassRoomCallService; +using Dm; + +namespace SafeCampus.Application.Services.Business.ClassRoomCallService; public class ClassRoomCallService : DbRepository, IClassRoomCallService { diff --git a/SafeCampus.API/SafeCampus.Application/Services/Business/ClassRoomCallService/Dto/ClassRoomCallUpdate.cs b/SafeCampus.API/SafeCampus.Application/Services/Business/ClassRoomCallService/Dto/ClassRoomCallUpdate.cs index 85b2ead..b69591e 100644 --- a/SafeCampus.API/SafeCampus.Application/Services/Business/ClassRoomCallService/Dto/ClassRoomCallUpdate.cs +++ b/SafeCampus.API/SafeCampus.Application/Services/Business/ClassRoomCallService/Dto/ClassRoomCallUpdate.cs @@ -14,4 +14,20 @@ public class ClassRoomCallUpdate /// 人员id /// public string PersonId { get; set; } +} + +public class ClassRoomCallInsert +{ + /// + /// 关联底库id 如果为空,表示该人员未匹配到底库 + /// + public string PersonSetId { get; set; } + /// + /// 人员id + /// + public string PersonId { get; set; } + /// + ///所属点名任务 + /// + public string TaskId { get; set; } } \ No newline at end of file diff --git a/SafeCampus.API/SafeCampus.Application/Services/Business/MajorService/Dto/MajorDto.cs b/SafeCampus.API/SafeCampus.Application/Services/Business/MajorService/Dto/MajorDto.cs index fa66126..a85a6ac 100644 --- a/SafeCampus.API/SafeCampus.Application/Services/Business/MajorService/Dto/MajorDto.cs +++ b/SafeCampus.API/SafeCampus.Application/Services/Business/MajorService/Dto/MajorDto.cs @@ -1,6 +1,4 @@ -using SafeCampus.Application.Services.Business.DepartmentService; - -namespace SafeCampus.Application.Services.Business.MajorService; +namespace SafeCampus.Application.Services.Business.MajorService; public class MajorDto { @@ -21,6 +19,10 @@ public class MajorDto /// 院系id /// public long DepId { get; set; } + /// + /// 排序 + /// + public int Sort { get; set; } public string DepartmentName { get; set; } } diff --git a/SafeCampus.API/SafeCampus.Application/Services/Business/PersonInfoService/Dto/PersonInfoDto.cs b/SafeCampus.API/SafeCampus.Application/Services/Business/PersonInfoService/Dto/PersonInfoDto.cs index 15451c5..89ece01 100644 --- a/SafeCampus.API/SafeCampus.Application/Services/Business/PersonInfoService/Dto/PersonInfoDto.cs +++ b/SafeCampus.API/SafeCampus.Application/Services/Business/PersonInfoService/Dto/PersonInfoDto.cs @@ -66,6 +66,9 @@ public class PersonInfoDto /// 进班时间 /// public DateTime? InsTime { get; set; } + + public string DepName { get; set; } + public string MajorName { get; set; } } public class PersonInfoDtoMapper : IRegister { @@ -76,6 +79,8 @@ public class PersonInfoDtoMapper : IRegister .Map(dest => dest.PersonSetId, src => src.PersonSetId) .Map(dest => dest.PersonSetName, src => src.PersonSetInfoItem.PersonSetName) .Map(dest => dest.Faces, src => src.PersonFacesList) - .Map(dest => dest.DormitoryName, src => src.DormitoryInfoItem.Name); + .Map(dest => dest.DormitoryName, src => src.DormitoryInfoItem.Name) + .Map(dest => dest.DepName, src => src.PersonSetInfoItem.MajorInfoItem.DepartmentInfoItem.Name) + .Map(dest => dest.MajorName, src => src.PersonSetInfoItem.MajorInfoItem.Name); } } \ No newline at end of file diff --git a/SafeCampus.API/SafeCampus.Application/Services/Business/PersonInfoService/PersonInfoService.cs b/SafeCampus.API/SafeCampus.Application/Services/Business/PersonInfoService/PersonInfoService.cs index 61a1597..0ae680a 100644 --- a/SafeCampus.API/SafeCampus.Application/Services/Business/PersonInfoService/PersonInfoService.cs +++ b/SafeCampus.API/SafeCampus.Application/Services/Business/PersonInfoService/PersonInfoService.cs @@ -29,7 +29,7 @@ public class PersonInfoService:DbRepository, IPersonInfoService { var model = await Context.Queryable() .Includes(x => x.DormitoryInfoItem) - .Includes(x => x.PersonSetInfoItem) + .Includes(x => x.PersonSetInfoItem,x=>x.MajorInfoItem,x=>x.DepartmentInfoItem) .Includes(x => x.PersonFacesList) .FirstAsync(x => x.PersonId == id); if (model == null) @@ -64,7 +64,7 @@ public class PersonInfoService:DbRepository, IPersonInfoService public async Task> GetPageList(PersonInfoSearch search) { var query = Context.Queryable() - .Includes(x => x.PersonSetInfoItem) + .Includes(x => x.PersonSetInfoItem, x => x.MajorInfoItem, x => x.DepartmentInfoItem) .Includes(x=>x.PersonFacesList) .Includes(x=>x.DormitoryInfoItem) .WhereIF(!string.IsNullOrEmpty(search.PersonSetId), x => x.PersonSetId == search.PersonSetId) diff --git a/SafeCampus.API/SafeCampus.Application/Services/Business/PersonSetInfoService/IPersonSetInfoService.cs b/SafeCampus.API/SafeCampus.Application/Services/Business/PersonSetInfoService/IPersonSetInfoService.cs index 01d60aa..2e8419c 100644 --- a/SafeCampus.API/SafeCampus.Application/Services/Business/PersonSetInfoService/IPersonSetInfoService.cs +++ b/SafeCampus.API/SafeCampus.Application/Services/Business/PersonSetInfoService/IPersonSetInfoService.cs @@ -23,5 +23,5 @@ public interface IPersonSetInfoService:ITransient /// 获取底库列表 /// /// - Task> GetPageList(long? majorId); + Task> GetPageList(long? majorId,string setName); } \ No newline at end of file diff --git a/SafeCampus.API/SafeCampus.Application/Services/Business/PersonSetInfoService/PersonSetInfoService.cs b/SafeCampus.API/SafeCampus.Application/Services/Business/PersonSetInfoService/PersonSetInfoService.cs index 8f2dda1..1f6eb93 100644 --- a/SafeCampus.API/SafeCampus.Application/Services/Business/PersonSetInfoService/PersonSetInfoService.cs +++ b/SafeCampus.API/SafeCampus.Application/Services/Business/PersonSetInfoService/PersonSetInfoService.cs @@ -38,12 +38,13 @@ public class PersonSetInfoService:DbRepository, IPersonSetInfoSer return true; } - public async Task> GetPageList(long? majorId) + public async Task> GetPageList(long? majorId, string setName) { var list =await Context.Queryable() .Includes(x=>x.MajorInfoItem,x=>x.DepartmentInfoItem) .Where(x=>x.PersonSetId!=SafeCampusConst.ZDRY) .WhereIF(majorId.HasValue,x=>x.MajorId==majorId) + .WhereIF(!string.IsNullOrEmpty(setName),x=>x.PersonSetName.Contains(setName)) .Includes(x => x.ClassTeacherItem, st => st.SysUserItem) .ToListAsync(); return list.Adapt>(); diff --git a/SafeCampus.API/SafeCampus.Application/Services/Business/Warn/Dto/WarnInfoSearch.cs b/SafeCampus.API/SafeCampus.Application/Services/Business/Warn/Dto/WarnInfoSearch.cs index dffbeb5..dd0ecaa 100644 --- a/SafeCampus.API/SafeCampus.Application/Services/Business/Warn/Dto/WarnInfoSearch.cs +++ b/SafeCampus.API/SafeCampus.Application/Services/Business/Warn/Dto/WarnInfoSearch.cs @@ -15,6 +15,10 @@ public class WarnInfoSearch:BasePageInput /// public List PersonSetIds { get; set; } /// + /// 人员id + /// + public string PersonId { get; set; } + /// /// 事件发生时间开始 /// public DateTime? StartTick { get; set; } @@ -27,6 +31,10 @@ public class WarnInfoSearch:BasePageInput /// public string CameraId { get; set; } /// + /// 摄像头ids(不是必填) + /// + public List CameraIds { get; set; } + /// /// 预警处理状态 /// public int? WarnHand { get; set; } diff --git a/SafeCampus.API/SafeCampus.Application/Services/Business/Warn/Service/WarnInfoService.cs b/SafeCampus.API/SafeCampus.Application/Services/Business/Warn/Service/WarnInfoService.cs index 00b6c24..dd73548 100644 --- a/SafeCampus.API/SafeCampus.Application/Services/Business/Warn/Service/WarnInfoService.cs +++ b/SafeCampus.API/SafeCampus.Application/Services/Business/Warn/Service/WarnInfoService.cs @@ -137,7 +137,9 @@ public class WarnInfoService:DbRepository, IWarnInfoService,ITransient .WhereIF(!string.IsNullOrEmpty(search.AlarmType), x => x.AlarmType == search.AlarmType) .WhereIF(search.AlarmTypes!=null&&search.AlarmTypes.Any(),x=>search.AlarmTypes.Contains(x.AlarmType)) .WhereIF(search.PersonSetIds != null&&search.PersonSetIds.Any(),x=>search.PersonSetIds.Contains(x.PersonSetId)) + .WhereIF(search.CameraIds != null&&search.CameraIds.Any(),x=>search.CameraIds.Contains(x.CameraId)) .WhereIF(!string.IsNullOrEmpty(search.CameraId), x => x.CameraId == search.CameraId) + .WhereIF(!string.IsNullOrEmpty(search.PersonId), x => x.PersonId == search.PersonId) .WhereIF(search.StartTick.HasValue, x => x.Tick >= search.StartTick) .WhereIF(search.EndTick.HasValue, x => x.Tick <= search.EndTick); diff --git a/SafeCampus.API/SafeCampus.Core/Enum/AlarmType.cs b/SafeCampus.API/SafeCampus.Core/Enum/AlarmType.cs index c75baf3..935a056 100644 --- a/SafeCampus.API/SafeCampus.Core/Enum/AlarmType.cs +++ b/SafeCampus.API/SafeCampus.Core/Enum/AlarmType.cs @@ -6,136 +6,163 @@ public enum AlarmType /// 周界入侵 /// [Description("周界入侵")] + [Display(Name = "visual_fence")] visual_fence, /// /// 翻越 /// [Description("翻越")] + [Display(Name = "climb_over")] climb_over, /// /// 人群聚集 /// [Description("人群聚集")] + [Display(Name = "crowd")] crowd, /// /// 烟火告警 /// [Description("烟火告警")] + [Display(Name = "fire_smoke")] fire_smoke, /// /// 可疑徘徊 /// [Description("可疑徘徊")] + [Display(Name = "wander")] wander, /// /// 重点人员布控 /// [Description("重点人员布控")] + [Display(Name = "blacklist")] blacklist, /// /// 奔跑 /// [Description("奔跑")] + [Display(Name = "run")] run, /// /// 追逐 /// [Description("追逐")] + [Display(Name = "chase")] chase, /// /// 摔倒 /// [Description("摔倒")] + [Display(Name = "fall_down")] fall_down, /// /// 跨线 /// [Description("跨线")] + [Display(Name = "cross_line")] cross_line, /// /// 教室点名 /// [Description("教室点名")] + [Display(Name = "class_room_call")] class_room_call, /// /// 趴桌子 /// [Description("趴桌子")] + [Display(Name = "lie_on_table")] lie_on_table, /// /// 抽烟检测 /// [Description("抽烟检测")] + [Display(Name = "person_smoke")] person_smoke, /// /// 猫鼠检测 /// [Description("猫鼠检测")] + [Display(Name = "animal_break_in")] animal_break_in, /// /// 巡更检测 /// [Description("巡更检测")] + [Display(Name = "patrol")] patrol, /// /// 离岗检测 /// [Description("离岗检测")] + [Display(Name = "off_duty")] off_duty, /// /// 打闹检测 /// [Description("打闹检测")] + [Display(Name = "fight")] fight, /// /// 未戴帽子检测 /// [Description("未戴帽子检测")] + [Display(Name = "hat_detect")] hat_detect, /// /// 未戴口罩检测 /// [Description("未戴口罩检测")] + [Display(Name = "mask_detect")] mask_detect, /// /// 未穿工作服检测 /// [Description("未穿工作服检测")] + [Display(Name = "cloth_detect")] cloth_detect, /// /// 洗手行为采集 /// [Description("洗手行为采集")] + [Display(Name = "wash_hand")] wash_hand, /// /// 车辆违停 /// [Description("车辆违停")] + [Display(Name = "vehicle_parking")] vehicle_parking, /// /// 车辆超速 /// [Description("车辆超速")] + [Display(Name = "vehicle_speeding")] vehicle_speeding, /// /// 违规占道 /// [Description("违规占道")] + [Display(Name = "violation_occupy")] violation_occupy, /// /// 玩手机 /// [Description("玩手机")] + [Display(Name = "play_phone")] play_phone, /// /// 骑车未戴头盔 /// [Description("骑车未戴头盔")] + [Display(Name = "bike_without_helmet")] bike_without_helmet, /// /// 儿童骑平衡车 /// [Description("儿童骑平衡车/滑板车")] + [Display(Name = "segway_with_child")] segway_with_child diff --git a/SafeCampus.API/SafeCampus.SqlSugar/Startup.cs b/SafeCampus.API/SafeCampus.SqlSugar/Startup.cs index 1f02795..43d2afa 100644 --- a/SafeCampus.API/SafeCampus.SqlSugar/Startup.cs +++ b/SafeCampus.API/SafeCampus.SqlSugar/Startup.cs @@ -1,14 +1,4 @@ - -// - - - - - - - - -namespace SafeCampus.SqlSugar; +namespace SafeCampus.SqlSugar; /// /// AppStartup启动类 diff --git a/SafeCampus.API/SafeCampus.System/Entity/MajorInfo.cs b/SafeCampus.API/SafeCampus.System/Entity/MajorInfo.cs index f4a47d1..98518f9 100644 --- a/SafeCampus.API/SafeCampus.System/Entity/MajorInfo.cs +++ b/SafeCampus.API/SafeCampus.System/Entity/MajorInfo.cs @@ -34,6 +34,6 @@ public class MajorInfo : PrimaryKeyEntity /// /// 院系信息 /// - [Navigate(NavigateType.OneToOne, nameof(DepartmentInfo.Id), nameof(DepId))] + [Navigate(NavigateType.OneToOne, nameof(DepId))] public DepartmentInfo DepartmentInfoItem { get; set; } } \ No newline at end of file diff --git a/SafeCampus.API/SafeCampus.System/Entity/PersonSetInfo.cs b/SafeCampus.API/SafeCampus.System/Entity/PersonSetInfo.cs index eee9061..70c1f27 100644 --- a/SafeCampus.API/SafeCampus.System/Entity/PersonSetInfo.cs +++ b/SafeCampus.API/SafeCampus.System/Entity/PersonSetInfo.cs @@ -24,7 +24,7 @@ public class PersonSetInfo /// /// 专业信息 /// - [Navigate(NavigateType.OneToOne, nameof(MajorInfo.Id), nameof(MajorId))] + [Navigate(NavigateType.OneToOne, nameof(MajorId))] public MajorInfo MajorInfoItem { get; set; } /// /// 班主任信息 diff --git a/SafeCampus.API/SafeCampus.System/SeedData/CameraGroupSeedData.cs b/SafeCampus.API/SafeCampus.System/SeedData/CameraGroupSeedData.cs new file mode 100644 index 0000000..4972a3f --- /dev/null +++ b/SafeCampus.API/SafeCampus.System/SeedData/CameraGroupSeedData.cs @@ -0,0 +1,9 @@ +namespace SafeCampus.System; + +public class CameraGroupSeedData : ISqlSugarEntitySeedData +{ + public IEnumerable SeedData() + { + return SeedDataUtil.GetSeedData("seed_sys_user.json"); + } +} \ No newline at end of file diff --git a/SafeCampus.API/SafeCampus.System/SeedData/Json/seed_bus_cameraGroup.json b/SafeCampus.API/SafeCampus.System/SeedData/Json/seed_bus_cameraGroup.json new file mode 100644 index 0000000..894582b --- /dev/null +++ b/SafeCampus.API/SafeCampus.System/SeedData/Json/seed_bus_cameraGroup.json @@ -0,0 +1,23 @@ +{ + "RECORDS": [ + { + "Id": "583659544297541", + "Name": "学校点位配置" + }, + { + "Id": "583659952070725", + "Name": "学校大门", + "ParentId": "583659544297541" + }, + { + "Id": "583659984986181", + "Name": "食堂", + "ParentId": "583659544297541" + }, + { + "Id": "583660006621253", + "Name": "图书馆", + "ParentId": "583659544297541" + } + ] +} \ No newline at end of file diff --git a/SafeCampus.API/SafeCampus.System/SeedData/SysUserSeedData.cs b/SafeCampus.API/SafeCampus.System/SeedData/SysUserSeedData.cs index 21edb6d..2c2912c 100644 --- a/SafeCampus.API/SafeCampus.System/SeedData/SysUserSeedData.cs +++ b/SafeCampus.API/SafeCampus.System/SeedData/SysUserSeedData.cs @@ -1,14 +1,4 @@ - -// - - - - - - - - -namespace SafeCampus.System; +namespace SafeCampus.System; /// /// 用户表种子数据 diff --git a/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Business/ClassRoomCallApi.cs b/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Business/ClassRoomCallApi.cs index 182a775..c4e5c60 100644 --- a/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Business/ClassRoomCallApi.cs +++ b/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Business/ClassRoomCallApi.cs @@ -1,9 +1,11 @@ -using MoYu.FriendlyException; +using Dm; +using MoYu.FriendlyException; using MoYu.RemoteRequest.Extensions; using Newtonsoft.Json.Linq; using SafeCampus.Application.Manager.DeepelephManager; using SafeCampus.Application.Services.Business.ClassRoomCallService; using SafeCampus.Application.Services.Business.ClassRoomCallTaskService; +using SafeCampus.Core.Extension; namespace SafeCampus.Web.Core.Controllers.Application.Business; /// @@ -141,10 +143,46 @@ public class ClassRoomCallApi : IDynamicApiController /// /// /// + [Obsolete] public async Task Update(ClassRoomCallUpdate input) { return await _classRoomCallService.Update(input); } + /// + /// 手动点名 + /// + /// + public async Task ManualRoll(List input) + { + var appSettings = App.GetOptionsMonitor(); + foreach (var item in input) + { + var model = new ClassRoomCallDto + { + TenantCode = appSettings.TenantCode, + PoiId = appSettings.PoiId, + TaskId = item.TaskId, + AlarmType = "class_room_call", + AlarmTypeDesc = AlarmType.class_room_call.GetDescription(), + EventId ="", + CameraId = "", + Tick = DateTime.Now, + PersonSetId = item.PersonSetId, + PersonId = item.PersonId, + Similarity = 1, + FaceScore = 100, + SnapshotUrl = "", + SnapshotData = "", + Rects = "", + Extend = "", + CreateTime = DateTime.Now, + TrackId = "" + }; + await _classRoomCallService.Add(model); + } + + return true; + } /// /// 删除点名记录(只可删除待处理的记录) diff --git a/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Business/DepartmentController.cs b/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Business/DepartmentController.cs index a6df05f..50b24db 100644 --- a/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Business/DepartmentController.cs +++ b/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Business/DepartmentController.cs @@ -52,9 +52,10 @@ public class DepartmentController /// /// id /// - public async Task Delete(List id) + [HttpPost] + public async Task Delete(BaseIdListInput id) { - return await _departmentService.Delete(id); + return await _departmentService.Delete(id.Ids); } /// diff --git a/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Business/DfieldApi.cs b/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Business/DfieldApi.cs index 7934b6c..e36aba1 100644 --- a/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Business/DfieldApi.cs +++ b/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Business/DfieldApi.cs @@ -45,7 +45,7 @@ public class DfieldApi : IDynamicApiController var model = JsonConvert.DeserializeObject(str); if ((bool)model["success"]) { - await _personSetInfoService.Add(new PersonSetInfoDto{PersonSetId = personSetId ,PersonSetName = input.Name,MajorId = input.MagjorId}); + await _personSetInfoService.Add(new PersonSetInfoDto{PersonSetId = personSetId ,PersonSetName = input.Name,MajorId = input.MajorId}); return model["data"]; } @@ -55,9 +55,9 @@ public class DfieldApi : IDynamicApiController /// 查询底库列表 /// /// - public async Task QueryAll(long? majorId) + public async Task QueryAll(long? majorId,string setName) { - return await _personSetInfoService.GetPageList(majorId); + return await _personSetInfoService.GetPageList(majorId, setName); var appSettings = App.GetOptionsMonitor(); var str = await $"{appSettings.SXAPIURL}/dfield-api/ecology/person/set/queryAll" .SetBody(new @@ -152,7 +152,7 @@ public class DfieldApi : IDynamicApiController { PersonSetId = input.Id, PersonSetName = input.Name, - MajorId = input.MagjorId + MajorId = input.MajorId }); } return isOk; diff --git a/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Business/DormitoryController.cs b/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Business/DormitoryController.cs index 5d2839c..8ac60c8 100644 --- a/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Business/DormitoryController.cs +++ b/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Business/DormitoryController.cs @@ -145,7 +145,7 @@ public class DormitoryController configId = queryList["data"][0]["configId"].ParseToInt(); } var time = new { timeBegin = input.TimeBegin, timeEnd = input.TimeEnd }; - var personSetIds = await _personSetInfoService.GetPageList(null); + var personSetIds = await _personSetInfoService.GetPageList(null,null); var cameras = await _cameraInfoService.GetPageList(new CameraSearch{PageSize = 1000,PageNum = 1}); var body = new { diff --git a/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Business/Dto/DfieldInput.cs b/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Business/Dto/DfieldInput.cs index 8f9a958..1d1a629 100644 --- a/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Business/Dto/DfieldInput.cs +++ b/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Business/Dto/DfieldInput.cs @@ -13,7 +13,7 @@ public class ControllersNameInput /// /// 专业id /// - public long MagjorId { get; set; } + public long MajorId { get; set; } } public class ControllersIdInput { diff --git a/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Business/Dto/MajorDepPersonSetModel.cs b/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Business/Dto/MajorDepPersonSetModel.cs new file mode 100644 index 0000000..98301f6 --- /dev/null +++ b/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Business/Dto/MajorDepPersonSetModel.cs @@ -0,0 +1,8 @@ +namespace SafeCampus.Web.Core.Controllers.Application.Business.Dto; + +public class MajorDepPersonSetModel +{ + public string Label { get; set; } + public object Value { get; set; } + public List Children { get; set; } +} \ No newline at end of file diff --git a/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Business/MajorController.cs b/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Business/MajorController.cs index b06b794..3871817 100644 --- a/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Business/MajorController.cs +++ b/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Business/MajorController.cs @@ -51,9 +51,10 @@ public class MajorController /// /// id /// - public async Task Delete(List id) + [HttpPost] + public async Task Delete(BaseIdListInput id) { - return await _majorService.Delete(id); + return await _majorService.Delete(id.Ids); } /// diff --git a/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Business/MobileController.cs b/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Business/MobileController.cs new file mode 100644 index 0000000..7d93a84 --- /dev/null +++ b/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Business/MobileController.cs @@ -0,0 +1,53 @@ +using SafeCampus.Application.Services.Business.DepartmentService; +using SafeCampus.Application.Services.Business.MajorService; +using SafeCampus.Application.Services.Business.PersonSetInfoService; +using SafeCampus.Web.Core.Controllers.Application.Business.Dto; + +namespace SafeCampus.Web.Core.Controllers.Application.Business; +/// +/// 移动端接口 +/// +[ApiDescriptionSettings(ApiGroupConsts.SYSTEM_Business, Order = 81, Tag = "移动端接口")] +[Route("/business/mobile")] +[RolePermission] +public class MobileController +{ + private readonly IDepartmentService _departmentService; + private readonly IMajorService _majorService; + private readonly IPersonSetInfoService _personSetInfoService; + + public MobileController(IDepartmentService departmentService, IMajorService majorService, IPersonSetInfoService personSetInfoService) + { + _departmentService = departmentService; + _majorService = majorService; + _personSetInfoService = personSetInfoService; + } + + /// + /// 移动端获取专业系部班级列表 + /// + /// + public async Task> GetMajorDep() + { + var dep = await _departmentService.GetNoPageList(new DepartmentSearch()); + var major = await _majorService.GetNoPageList(new MajorSearch()); + var set = await _personSetInfoService.GetPageList(null, null); + var list = dep.Select(item => new MajorDepPersonSetModel + { + Label = item.Name, + Value = item.Id, + Children = major.Where(x => x.DepId == item.Id) + .Select(x => new MajorDepPersonSetModel + { + Label = x.Name, + Value = x.Id, + Children = set.Where(xx => xx.MajorId == x.Id) + .Select(xxx => new MajorDepPersonSetModel { Label = xxx.PersonSetName, Value = xxx.PersonSetId }) + .ToList() + }) + .ToList(), + }) + .ToList(); + return await Task.FromResult(list); + } +} \ No newline at end of file diff --git a/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/LargeScreen/LargeScreenController.cs b/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/LargeScreen/LargeScreenController.cs index b0f223d..4e41684 100644 --- a/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/LargeScreen/LargeScreenController.cs +++ b/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/LargeScreen/LargeScreenController.cs @@ -308,9 +308,9 @@ public class LargeScreenController /// 获取班级列表 /// /// - public async Task GetPersonSetNoPageList(long? majorId) + public async Task GetPersonSetNoPageList(long? majorId,string setName) { - return await _personSetInfoService.GetPageList(majorId); + return await _personSetInfoService.GetPageList(majorId, setName); } /// /// 获取专业 diff --git a/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Violation/Dto/SearchType.cs b/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Violation/Dto/SearchType.cs new file mode 100644 index 0000000..5b8de26 --- /dev/null +++ b/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Violation/Dto/SearchType.cs @@ -0,0 +1,20 @@ +namespace SafeCampus.Web.Core.Controllers.Application.Violation; + +public enum SearchType +{ + /// + /// 本周 + /// + [Description("本周")] + ThisWeek=1, + /// + /// 上周 + /// + [Description("上周")] + LastWeek, + /// + /// 本月 + /// + [Description("本月")] + ThisMonth, +} \ No newline at end of file diff --git a/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Violation/SummarySeach.cs b/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Violation/SummarySeach.cs new file mode 100644 index 0000000..d286f97 --- /dev/null +++ b/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Violation/SummarySeach.cs @@ -0,0 +1,13 @@ +namespace SafeCampus.Web.Core.Controllers.Application.Violation; + +public class SummarySeach +{ + /// + /// 搜索条件 + /// + public SearchType SearchType { get; set; } + /// + /// 人员id + /// + public string PersonId { get; set; } +} \ No newline at end of file diff --git a/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Violation/VioPortraitSummary.cs b/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Violation/VioPortraitSummary.cs index 8ca0ed2..b5e2277 100644 --- a/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Violation/VioPortraitSummary.cs +++ b/SafeCampus.API/SafeCampus.Web.Core/Controllers/Application/Violation/VioPortraitSummary.cs @@ -1,4 +1,10 @@ -using SafeCampus.Application.Services.Business.PersonInfoService; +using Masuit.Tools.Systems; +using SafeCampus.Application.Services.Business.CameraInfoService; +using SafeCampus.Application.Services.Business.PersonInfoService; +using SafeCampus.Application.Services.Business.Warn.Dto; +using SafeCampus.Application.Services.Business.Warn.Service; +using System; + namespace SafeCampus.Web.Core.Controllers.Application.Violation; /// @@ -10,10 +16,14 @@ namespace SafeCampus.Web.Core.Controllers.Application.Violation; public class VioPortraitSummary { private readonly IPersonInfoService _personInfoService; + private readonly ICameraInfoService _cameraInfoService; + private readonly IWarnInfoService _warnInfoService; - public VioPortraitSummary(IPersonInfoService personInfoService) + public VioPortraitSummary(IPersonInfoService personInfoService, ICameraInfoService cameraInfoService, IWarnInfoService warnInfoService) { _personInfoService = personInfoService; + _cameraInfoService = cameraInfoService; + _warnInfoService = warnInfoService; } /// @@ -64,16 +74,131 @@ public class VioPortraitSummary return new { label, value }; } /// - /// 获取学生属性标签 + /// 学生--告警分类统计 /// /// - public async Task GetStudentDetail() + public async Task GetStudentDetail(SummarySeach seach) { var random = new Random(); var label = new List { "打闹", "趴桌子", "爱运动", "喜欢读书", "性格孤僻" }; var value = label.Select(item => random.Next(2, 20)).ToList(); - //var value = new List() { 10, 5, 8, 5, 1 }; - return new { label, value }; + return await Task.FromResult(new { label, value ,PF="93",XF="90"}); + } + /// + /// 学生--出勤情况 + /// + /// + public async Task Attendance(SummarySeach seach) + { + switch (seach.SearchType) + { + case SearchType.ThisWeek: + case SearchType.LastWeek: + case SearchType.ThisMonth: + default: + var random = new Random(); + var label = new List { "正常出勤", "缺勤", "迟到" }; + var value = label.Select(item => random.Next(2, 20)).ToList(); + return await Task.FromResult(new { label, value }); + } + } + /// + /// 学生--出校 + /// + /// + public async Task OutsideSchool(SummarySeach seach) + { + return await StudentSummary(seach, ApplicationConst.XXDM); + } + /// + /// 学生--图书馆 + /// + /// + public async Task Library(SummarySeach seach) + { + return await StudentSummary(seach, ApplicationConst.TSG); + } + /// + /// 学生--食堂 + /// + /// + public async Task Canteen(SummarySeach seach) + { + return await StudentSummary(seach, ApplicationConst.ST); } + /// + /// 学生画像统计 + /// + /// + /// + /// + private async Task StudentSummary(SummarySeach seach,long groupId) + { + var camera = await _cameraInfoService.GetPageList(new CameraSearch { GroupId = groupId, PageSize = 1000, PageNum = 1 }); + var cameraIds = camera.List.Select(x => x.SensorId).ToList(); + DateTime endWeek = DateTime.Now; + // 获取本周的第一天(假设一周从周一开始) + DateTime startOfWeek = endWeek.AddDays(-(int)endWeek.DayOfWeek + (int)DayOfWeek.Monday); + var label = new List(); + var value = new List(); + switch (seach.SearchType) + { + case SearchType.ThisWeek: + var list = await _warnInfoService.GetListNoPage(new WarnInfoSearch + { + AlarmType = AlarmType.visual_fence.GetDisplay(), + CameraIds = cameraIds, + PersonId = seach.PersonId, + StartTick = startOfWeek, + EndTick = endWeek + }); + for (var i = startOfWeek; i < endWeek;) + { + label.Add(i.ToString("yyyy-MM-dd")); + value.Add(list.Count(x => x.Tick.Year == i.Year && x.Tick.Month == i.Month && x.Tick.Day == i.Day)); + i = i.AddDays(1); + } + return new { label, value }; + case SearchType.LastWeek: + DateTime startOfLastWeek = startOfWeek.AddDays(-7); + DateTime endOfLastWeek = startOfLastWeek.AddDays(6).Date.AddDays(1).AddTicks(-1); // 上周的最后一刻 + var list1 = await _warnInfoService.GetListNoPage(new WarnInfoSearch + { + AlarmType = AlarmType.visual_fence.GetDisplay(), + CameraIds = cameraIds, + PersonId = seach.PersonId, + StartTick = startOfLastWeek, + EndTick = endOfLastWeek + }); + + for (var i = startOfWeek; i < endWeek;) + { + label.Add(i.ToString("yyyy-MM-dd")); + value.Add(list1.Count(x => x.Tick.Year == i.Year && x.Tick.Month == i.Month && x.Tick.Day == i.Day)); + i = i.AddDays(1); + } + return new { label, value }; + case SearchType.ThisMonth: + DateTime startOfMonth = new DateTime(endWeek.Year, endWeek.Month, 1); + var list2 = await _warnInfoService.GetListNoPage(new WarnInfoSearch + { + AlarmType = AlarmType.visual_fence.GetDisplay(), + CameraIds = cameraIds, + PersonId = seach.PersonId, + StartTick = startOfMonth, + EndTick = endWeek + }); + + for (var i = startOfWeek; i < endWeek;) + { + label.Add(i.ToString("yyyy-MM-dd")); + value.Add(list2.Count(x => x.Tick.Year == i.Year && x.Tick.Month == i.Month && x.Tick.Day == i.Day)); + i = i.AddDays(1); + } + return new { label, value }; + default: + return null; + } + } } \ No newline at end of file diff --git a/SafeCampus.API/SafeCampus.Web.Core/SafeCampus.Web.Core.xml b/SafeCampus.API/SafeCampus.Web.Core/SafeCampus.Web.Core.xml index d5d602a..5be2122 100644 --- a/SafeCampus.API/SafeCampus.Web.Core/SafeCampus.Web.Core.xml +++ b/SafeCampus.API/SafeCampus.Web.Core/SafeCampus.Web.Core.xml @@ -269,6 +269,12 @@ + + + 手动点名 + + + 删除点名记录(只可删除待处理的记录) @@ -411,7 +417,7 @@ - + 删除 @@ -516,7 +522,7 @@ - + 查询底库列表 @@ -837,7 +843,7 @@ 结束时间 - + 专业id @@ -959,7 +965,7 @@ - + 删除 @@ -979,6 +985,17 @@ + + + 移动端接口 + + + + + 移动端获取专业系部班级列表 + + + 客流查询接口 @@ -1225,7 +1242,7 @@ - + 获取班级列表 @@ -1264,6 +1281,31 @@ 包含的班级id + + + 本周 + + + + + 上周 + + + + + 本月 + + + + + 搜索条件 + + + + + 人员id + + 预警分析控制器 @@ -1358,10 +1400,42 @@ - + + + 学生--告警分类统计 + + + + + + 学生--出勤情况 + + + + + + 学生--出校 + + + + + + 学生--图书馆 + + + + + + 学生--食堂 + + + + - 获取学生属性标签 + 学生画像统计 + + diff --git a/SafeCampus.API/SafeCampus.Web.Entry/Properties/PublishProfiles/FolderProfile.pubxml.user b/SafeCampus.API/SafeCampus.Web.Entry/Properties/PublishProfiles/FolderProfile.pubxml.user index 406f77c..9aafb71 100644 --- a/SafeCampus.API/SafeCampus.Web.Entry/Properties/PublishProfiles/FolderProfile.pubxml.user +++ b/SafeCampus.API/SafeCampus.Web.Entry/Properties/PublishProfiles/FolderProfile.pubxml.user @@ -5,7 +5,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121. <_PublishTargetUrl>F:\Project\QJKJ\SafeCampus\SafeCampus.API\SafeCampus.Web.Entry\bin\Release\net6.0\publish\ - True|2024-08-19T05:38:29.9236695Z;False|2024-08-19T13:29:18.8873264+08:00;True|2024-08-19T12:31:57.9280692+08:00;True|2024-08-19T11:50:36.7241244+08:00;True|2024-08-19T10:24:05.0018377+08:00;True|2024-08-19T10:23:30.0445364+08:00;True|2024-08-19T10:12:33.8316906+08:00;True|2024-08-19T10:10:48.0967630+08:00;True|2024-08-16T12:17:51.5743944+08:00;True|2024-08-16T11:36:15.1880346+08:00;True|2024-08-12T11:27:42.2864171+08:00;True|2024-08-09T14:54:42.9062124+08:00;True|2024-08-09T11:49:01.0339449+08:00;True|2024-08-09T11:43:21.9947939+08:00;True|2024-08-09T10:43:25.7641675+08:00;True|2024-08-08T15:23:17.0510180+08:00;True|2024-08-08T15:20:50.3450876+08:00;True|2024-08-08T11:06:43.0783261+08:00;True|2024-08-07T17:24:03.0780935+08:00;True|2024-08-07T17:20:50.6266614+08:00;True|2024-08-07T17:18:15.6367265+08:00;True|2024-08-06T17:31:40.3452266+08:00;True|2024-07-31T16:54:03.1890463+08:00;True|2024-07-30T17:11:33.2514194+08:00;True|2024-07-30T17:08:14.5888060+08:00;True|2024-07-30T09:56:08.6349163+08:00;True|2024-07-30T09:50:02.2368269+08:00;True|2024-07-29T16:20:12.3202393+08:00;True|2024-07-29T16:16:29.9634841+08:00;True|2024-07-29T16:09:51.7696392+08:00;True|2024-07-29T16:06:49.4145658+08:00;True|2024-07-29T15:58:50.6654249+08:00;True|2024-07-29T11:32:11.6206514+08:00;True|2024-07-29T11:26:26.1574563+08:00;True|2024-07-29T11:04:41.1896705+08:00;True|2024-07-29T10:38:38.4560275+08:00;True|2024-07-29T10:33:38.5288332+08:00;False|2024-07-29T10:33:21.0642261+08:00;False|2024-07-29T10:33:00.1005216+08:00;True|2024-07-29T09:54:59.2794860+08:00;True|2024-07-29T09:08:54.4899269+08:00;True|2024-07-26T18:02:13.5407348+08:00;True|2024-07-26T17:46:06.7922851+08:00;True|2024-07-26T15:50:48.6986834+08:00;True|2024-07-26T15:11:17.1696147+08:00;True|2024-07-26T13:58:49.6884964+08:00;True|2024-07-25T17:31:33.0050952+08:00;True|2024-07-25T17:09:12.7084910+08:00;True|2024-07-25T17:02:01.2617736+08:00;True|2024-07-25T16:59:51.6271873+08:00;True|2024-07-25T16:58:05.5249148+08:00;True|2024-07-25T14:14:10.2008367+08:00;False|2024-07-25T14:13:54.0300465+08:00;True|2024-07-25T14:08:57.0244482+08:00;True|2024-07-25T13:41:48.8201522+08:00;True|2024-07-25T10:41:30.7277553+08:00;True|2024-07-25T10:16:05.9105335+08:00;True|2024-07-24T15:31:54.7914854+08:00;True|2024-07-24T09:54:17.6182454+08:00;True|2024-07-23T17:01:18.1510211+08:00;True|2024-07-23T16:41:53.3366577+08:00;True|2024-07-23T16:07:25.4129335+08:00;True|2024-07-23T15:50:42.2437488+08:00;True|2024-07-23T15:19:00.1900116+08:00;True|2024-07-23T14:59:22.8551233+08:00;True|2024-07-23T14:19:55.1193373+08:00;True|2024-07-19T18:04:32.2703039+08:00;True|2024-07-19T15:56:25.4103701+08:00;True|2024-07-19T15:09:00.9662436+08:00;True|2024-07-19T15:05:35.7255851+08:00;True|2024-07-19T13:14:42.9559521+08:00;False|2024-07-19T11:37:52.4020673+08:00;True|2024-07-19T11:10:22.8661346+08:00;True|2024-07-19T11:00:00.8819251+08:00;True|2024-07-19T10:45:46.8271770+08:00;True|2024-07-19T10:45:03.8183458+08:00;True|2024-07-18T18:04:42.1000382+08:00;True|2024-07-18T18:01:51.3964409+08:00;True|2024-07-18T17:57:50.3509206+08:00;True|2024-07-18T16:32:46.2184830+08:00;True|2024-07-18T16:00:11.1381449+08:00;True|2024-07-18T15:11:52.6472758+08:00;True|2024-07-18T11:54:49.4848006+08:00;True|2024-07-18T09:25:58.7204846+08:00;True|2024-07-17T17:29:28.6175272+08:00;True|2024-07-17T17:10:54.5184246+08:00;True|2024-07-17T16:57:59.8174060+08:00;True|2024-07-17T16:18:13.8137834+08:00;True|2024-07-17T15:59:16.2360757+08:00;True|2024-07-17T15:31:41.9159909+08:00;True|2024-07-17T14:41:14.6127340+08:00;True|2024-07-17T14:28:53.4455461+08:00;True|2024-07-17T14:09:44.1826222+08:00;True|2024-07-17T13:57:12.3372528+08:00;True|2024-07-17T11:39:19.5754602+08:00;True|2024-07-16T17:44:10.6162562+08:00;True|2024-07-16T17:13:48.3928403+08:00;True|2024-07-16T17:00:47.7458109+08:00;True|2024-07-16T14:07:19.3463408+08:00;True|2024-07-15T16:05:13.3561511+08:00; + True|2024-08-27T07:31:21.7026102Z;True|2024-08-20T11:12:26.7141701+08:00;True|2024-08-19T17:23:34.5703879+08:00;True|2024-08-19T15:55:28.3484786+08:00;True|2024-08-19T15:45:49.5623372+08:00;True|2024-08-19T14:56:17.7733738+08:00;True|2024-08-19T14:52:03.2782392+08:00;True|2024-08-19T14:10:57.7043528+08:00;True|2024-08-19T13:38:29.9236695+08:00;False|2024-08-19T13:29:18.8873264+08:00;True|2024-08-19T12:31:57.9280692+08:00;True|2024-08-19T11:50:36.7241244+08:00;True|2024-08-19T10:24:05.0018377+08:00;True|2024-08-19T10:23:30.0445364+08:00;True|2024-08-19T10:12:33.8316906+08:00;True|2024-08-19T10:10:48.0967630+08:00;True|2024-08-16T12:17:51.5743944+08:00;True|2024-08-16T11:36:15.1880346+08:00;True|2024-08-12T11:27:42.2864171+08:00;True|2024-08-09T14:54:42.9062124+08:00;True|2024-08-09T11:49:01.0339449+08:00;True|2024-08-09T11:43:21.9947939+08:00;True|2024-08-09T10:43:25.7641675+08:00;True|2024-08-08T15:23:17.0510180+08:00;True|2024-08-08T15:20:50.3450876+08:00;True|2024-08-08T11:06:43.0783261+08:00;True|2024-08-07T17:24:03.0780935+08:00;True|2024-08-07T17:20:50.6266614+08:00;True|2024-08-07T17:18:15.6367265+08:00;True|2024-08-06T17:31:40.3452266+08:00;True|2024-07-31T16:54:03.1890463+08:00;True|2024-07-30T17:11:33.2514194+08:00;True|2024-07-30T17:08:14.5888060+08:00;True|2024-07-30T09:56:08.6349163+08:00;True|2024-07-30T09:50:02.2368269+08:00;True|2024-07-29T16:20:12.3202393+08:00;True|2024-07-29T16:16:29.9634841+08:00;True|2024-07-29T16:09:51.7696392+08:00;True|2024-07-29T16:06:49.4145658+08:00;True|2024-07-29T15:58:50.6654249+08:00;True|2024-07-29T11:32:11.6206514+08:00;True|2024-07-29T11:26:26.1574563+08:00;True|2024-07-29T11:04:41.1896705+08:00;True|2024-07-29T10:38:38.4560275+08:00;True|2024-07-29T10:33:38.5288332+08:00;False|2024-07-29T10:33:21.0642261+08:00;False|2024-07-29T10:33:00.1005216+08:00;True|2024-07-29T09:54:59.2794860+08:00;True|2024-07-29T09:08:54.4899269+08:00;True|2024-07-26T18:02:13.5407348+08:00;True|2024-07-26T17:46:06.7922851+08:00;True|2024-07-26T15:50:48.6986834+08:00;True|2024-07-26T15:11:17.1696147+08:00;True|2024-07-26T13:58:49.6884964+08:00;True|2024-07-25T17:31:33.0050952+08:00;True|2024-07-25T17:09:12.7084910+08:00;True|2024-07-25T17:02:01.2617736+08:00;True|2024-07-25T16:59:51.6271873+08:00;True|2024-07-25T16:58:05.5249148+08:00;True|2024-07-25T14:14:10.2008367+08:00;False|2024-07-25T14:13:54.0300465+08:00;True|2024-07-25T14:08:57.0244482+08:00;True|2024-07-25T13:41:48.8201522+08:00;True|2024-07-25T10:41:30.7277553+08:00;True|2024-07-25T10:16:05.9105335+08:00;True|2024-07-24T15:31:54.7914854+08:00;True|2024-07-24T09:54:17.6182454+08:00;True|2024-07-23T17:01:18.1510211+08:00;True|2024-07-23T16:41:53.3366577+08:00;True|2024-07-23T16:07:25.4129335+08:00;True|2024-07-23T15:50:42.2437488+08:00;True|2024-07-23T15:19:00.1900116+08:00;True|2024-07-23T14:59:22.8551233+08:00;True|2024-07-23T14:19:55.1193373+08:00;True|2024-07-19T18:04:32.2703039+08:00;True|2024-07-19T15:56:25.4103701+08:00;True|2024-07-19T15:09:00.9662436+08:00;True|2024-07-19T15:05:35.7255851+08:00;True|2024-07-19T13:14:42.9559521+08:00;False|2024-07-19T11:37:52.4020673+08:00;True|2024-07-19T11:10:22.8661346+08:00;True|2024-07-19T11:00:00.8819251+08:00;True|2024-07-19T10:45:46.8271770+08:00;True|2024-07-19T10:45:03.8183458+08:00;True|2024-07-18T18:04:42.1000382+08:00;True|2024-07-18T18:01:51.3964409+08:00;True|2024-07-18T17:57:50.3509206+08:00;True|2024-07-18T16:32:46.2184830+08:00;True|2024-07-18T16:00:11.1381449+08:00;True|2024-07-18T15:11:52.6472758+08:00;True|2024-07-18T11:54:49.4848006+08:00;True|2024-07-18T09:25:58.7204846+08:00;True|2024-07-17T17:29:28.6175272+08:00;True|2024-07-17T17:10:54.5184246+08:00;True|2024-07-17T16:57:59.8174060+08:00;True|2024-07-17T16:18:13.8137834+08:00;True|2024-07-17T15:59:16.2360757+08:00;True|2024-07-17T15:31:41.9159909+08:00;True|2024-07-17T14:41:14.6127340+08:00;True|2024-07-17T14:28:53.4455461+08:00; \ No newline at end of file