diff --git a/.gitignore b/.gitignore index 9491a2f..fcd119a 100644 --- a/.gitignore +++ b/.gitignore @@ -360,4 +360,5 @@ MigrationBackup/ .ionide/ # Fody - auto-generated XML schema -FodyWeavers.xsd \ No newline at end of file +FodyWeavers.xsd +/SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/.idea diff --git a/SiteManagementSystem(SoftwareEngineering)/Entity/Field.cs b/SiteManagementSystem(SoftwareEngineering)/Entity/Field.cs index 64ac58b..a9fc5d9 100644 --- a/SiteManagementSystem(SoftwareEngineering)/Entity/Field.cs +++ b/SiteManagementSystem(SoftwareEngineering)/Entity/Field.cs @@ -9,7 +9,7 @@ namespace SiteManagementSystem_SoftwareEngineering_.Entity public Guid Id { get; set; } = Guid.NewGuid(); public string Name { get; set; } = null!; public string Position { get; set; } = null!; - public string OpenTime { get; set; } = null!; + public string Opentime { get; set; } = null!; public FieldType Type { get; set; } = FieldType.Unspecified; } } diff --git a/SiteManagementSystem(SoftwareEngineering)/Entity/UserField.cs b/SiteManagementSystem(SoftwareEngineering)/Entity/FieldRecord.cs similarity index 92% rename from SiteManagementSystem(SoftwareEngineering)/Entity/UserField.cs rename to SiteManagementSystem(SoftwareEngineering)/Entity/FieldRecord.cs index e44b393..99019ec 100644 --- a/SiteManagementSystem(SoftwareEngineering)/Entity/UserField.cs +++ b/SiteManagementSystem(SoftwareEngineering)/Entity/FieldRecord.cs @@ -2,7 +2,7 @@ namespace SiteManagementSystem_SoftwareEngineering_.Entity { - public class UserField + public class FieldRecord { [Key] public Guid Uid { get; set; } diff --git a/SiteManagementSystem(SoftwareEngineering)/Program.cs b/SiteManagementSystem(SoftwareEngineering)/Program.cs index 76f1414..92c8358 100644 --- a/SiteManagementSystem(SoftwareEngineering)/Program.cs +++ b/SiteManagementSystem(SoftwareEngineering)/Program.cs @@ -19,7 +19,8 @@ builder.Services.AddSwaggerGen(); builder.Services.AddDbContext(options => options.UseMySql( builder.Configuration.GetConnectionString("SQL"), - MariaDbServerVersion.AutoDetect(builder.Configuration.GetConnectionString("SQL")) + MySqlServerVersion.AutoDetect(builder.Configuration.GetConnectionString("SQL")) + //MariaDbServerVersion.AutoDetect(builder.Configuration.GetConnectionString("SQL")) ) ); builder diff --git a/SiteManagementSystem(SoftwareEngineering)/Service/FieldService.cs b/SiteManagementSystem(SoftwareEngineering)/Service/FieldService.cs index d993585..b38ec37 100644 --- a/SiteManagementSystem(SoftwareEngineering)/Service/FieldService.cs +++ b/SiteManagementSystem(SoftwareEngineering)/Service/FieldService.cs @@ -44,7 +44,7 @@ namespace SiteManagementSystem_SoftwareEngineering_.Service { Name = "t1", Position = "t2", - OpenTime = "t3" + Opentime = "t3" } ); Console.WriteLine( @@ -64,12 +64,12 @@ namespace SiteManagementSystem_SoftwareEngineering_.Service public class EntityFrameworkPythonCompatibilityAndInterpretationLayer { public readonly SQLHelperService FieldDb; - public readonly SQLHelperService RecordDb; + public readonly SQLHelperService RecordDb; public EntityFrameworkPythonCompatibilityAndInterpretationLayer(SQLService storageService) { FieldDb = new SQLHelperService(storageService, nameof(storageService.Fields)); - RecordDb = new SQLHelperService( + RecordDb = new SQLHelperService( storageService, nameof(storageService.UserFieldRecords) ); diff --git a/SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/demo.py b/SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/demo.py index d213d77..afd4eaf 100644 --- a/SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/demo.py +++ b/SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/demo.py @@ -1,17 +1,154 @@ -from layer import Layer +import time + +from layer import Layer from field import Field from user import User -from user_field import UserFieldRecord +from user_field import FieldRecord +from datetime import datetime class Service: - layer = Layer(LAYER) - x = 16 + layer = Layer(LAYER) #初始化数据库数据并启动增删查功能 + + #普通用户操作: + #请求一条场地使用信息(普通用户自动传入自己的用户id,管理员用户手动选择传入用户id) #redis + #参数:cs_fieldRecord(用户id,场地id,开始时间,结束时间) 返回:bool 是否预约成功 + def AddAppointment(self,cs_fieldRecord) -> bool: + fieldRecord=FieldRecord(cs_fieldRecord) + records=self.layer.find_record("fid",fieldRecord.fid) + #如果用户已经有预约了,就不能再提交预约 + if len(self.layer.find_record("uid",fieldRecord.uid))!=0: + raise ValueError("Already has an appointment") + else: + #检查场地此时是否有空 + for x in records: + if not((x.end_time>=fieldRecord.start_time) or (x.start_time<=fieldRecord.end_time)): + raise ValueError("Field busy") + #添加记录 + self.layer.add_record(fieldRecord) + return True + + + #提前结束场地的使用 正在使用时提前结束 #finished + #参数:cs_user //cs_fieldRecord(用户id,场地id,开始时间,) 返回:bool 是否结束成功 + def EndAppointment(self,cs_user) -> bool: + user=User(cs_user) + records=self.layer.find_record("uid",user.uid) + if len(records)==0: + raise ValueError("No appointment") + elif len(records) !=1: + raise ValueError("Appointment nums error") + else: + fid = records[0].fid + uid = user.id + start_time = records[0].start_time + #获取当前时间并转为%Y-%m-%d %H:%M:%S形式的字符串 + curtime=datetime.now().strftime("%Y-%m-%d %H:%M:%S") + #正在使用时可以提前结束,修改结束时间 + if curtime>=start_time and curtime bool: + user=User(cs_user) + records=self.layer.find_record("uid",user.id) + if len(records)==0: + raise ValueError("No appointment or appointment is finished") + elif len(records)!=1: + raise ValueError("Appointment nums error") + else: + curtime=datetime.now().strftime("%Y-%m-%d %H:%M:%S") + if curtime bool: + field_Record=FieldRecord(cs_fieldRecord) + records=self.layer.find_record("uid", field_Record.uid) + if len(records)==0: + raise ValueError("No appointment or appointment is finished") + elif len(records)!=1: + raise ValueError("Appointment nums error") + else: + curtime=datetime.now().strftime("%Y-%m-%d %H:%M:%S") + start_time=records[0].start_time + end_time=records[0].end_time + if curtime>=start_time and curtime []: + fid=FieldRecord(cs_fieldRecord).fid + records=self.layer.find_record("fid",fid) + list_time=[] + for x in records: + tup=(x.start_time,x.end_time) + list_time.append(tup) + # 使用 sorted() 函数进行排序,key 参数指定用于排序的键函数 + sorted_time_list = sorted(list_time, key=lambda x: self.parse_time(x[0])) + #从后往前遍历 + for x in range(len(sorted_time_list)-1,0,-1): + strtm2 = sorted_time_list[x][0] + strtm1 = sorted_time_list[x - 1][1] + timestamp1 = time.mktime(time.strptime(strtm1, "%Y-%m-%d %H:%M:%S")) + timestamp2 = time.mktime(time.strptime(strtm2, "%Y-%m-%d %H:%M:%S")) + if (timestamp2 - timestamp1) / 60 <= 10: + tup = (sorted_time_list[x - 1][0], sorted_time_list[x][1]) + sorted_time_list.pop(x) + sorted_time_list[x - 1] = tup + return sorted_time_list + + + + + + #查询用户的预约记录 + # 参数:cs_user(id) 返回:array_cs_fieldRecord + def QueryAppointmentRecord(self,cs_user) -> []: + user=User(cs_user) + + + #管理员操作:(包含普通用户操作以及一下特殊操作) + + #添加一个场地 + #参数:cs_field(id,name,position,open_time,type) 返回:bool 是否添加成功 def AddField(self, cs_field) -> str: field = Field(cs_field) self.layer.add_field(field) return "" + + #删除一个场地 + # 参数:cs_field(id,name,position(null),open_time(null),type(null)) 返回:bool 是否删除成功 + + + + + + + diff --git a/SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/field.py b/SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/field.py index f447910..f3fbb79 100644 --- a/SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/field.py +++ b/SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/field.py @@ -26,8 +26,8 @@ class Field: self.position = field.Position self.open_time = field.OpenTime self.type = field.Type - elif len(args) == 4: - self.id, self.name, self.position, self.type = args + elif len(args) == 5: + self.id, self.name, self.position, self.open_time, self.type = args else: raise ValueError("Invalid arguments for Field initialization") diff --git a/SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/user_field.py b/SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/fieldRecord.py similarity index 98% rename from SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/user_field.py rename to SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/fieldRecord.py index eb6ce01..820e463 100644 --- a/SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/user_field.py +++ b/SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/fieldRecord.py @@ -7,7 +7,7 @@ clr.AddReference('System') from System import Guid, Convert -class UserFieldRecord: +class FieldRecord: fid = "" uid = "" start_time: time.struct_time diff --git a/SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/layer.py b/SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/layer.py index b2e853e..904ec8e 100644 --- a/SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/layer.py +++ b/SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/layer.py @@ -1,7 +1,7 @@ import clr from user import User from field import Field -from user_field import UserFieldRecord +from user_field import FieldRecord clr.AddReference('System') from System import Guid, DateTime @@ -24,14 +24,14 @@ class Layer: self._field_db.TryDelete(field.id, field.parse_to_csharp_object(self._field_db.GetDefaultEntity()).Id) return self - def add_record(self, record: UserFieldRecord) -> 'Layer': + def add_record(self, record: FieldRecord) -> 'Layer': self._record_db.Add(record.parse_to_csharp_object(self._record_db.GetDefaultEntity())) return self - def find_record(self, key: str, value: str) -> [UserFieldRecord]: - return [UserFieldRecord(t) for t in self._record_db.FindAll(key, Guid.Parse(value))] + def find_record(self, key: str, value: str) -> [FieldRecord]: + return [FieldRecord(t) for t in self._record_db.FindAll(key, Guid.Parse(value))] # One User only allowed to book one field at a time - def remove_record(self, record: UserFieldRecord) -> 'Layer': + def remove_record(self, record: FieldRecord) -> 'Layer': self._record_db.TryDelete("Uid", record.parse_to_csharp_object(self._record_db.GetDefaultEntity()).Uid) return self diff --git a/SiteManagementSystem(SoftwareEngineering)/Service/SQLService.cs b/SiteManagementSystem(SoftwareEngineering)/Service/SQLService.cs index b8dfd16..a47a781 100644 --- a/SiteManagementSystem(SoftwareEngineering)/Service/SQLService.cs +++ b/SiteManagementSystem(SoftwareEngineering)/Service/SQLService.cs @@ -13,6 +13,6 @@ namespace SiteManagementSystem_SoftwareEngineering_.Service } public DbSet Users { get; set; } public DbSet Fields { get; set; } - public DbSet UserFieldRecords{get;set;} + public DbSet UserFieldRecords{get;set;} } } diff --git a/SiteManagementSystem(SoftwareEngineering)/SiteManagementSystem(SoftwareEngineering).csproj b/SiteManagementSystem(SoftwareEngineering)/SiteManagementSystem(SoftwareEngineering).csproj index d88f9e9..568cff5 100644 --- a/SiteManagementSystem(SoftwareEngineering)/SiteManagementSystem(SoftwareEngineering).csproj +++ b/SiteManagementSystem(SoftwareEngineering)/SiteManagementSystem(SoftwareEngineering).csproj @@ -18,8 +18,4 @@ - - - - diff --git a/SiteManagementSystem(SoftwareEngineering)/appsettings.json b/SiteManagementSystem(SoftwareEngineering)/appsettings.json index a41b3be..324e0ec 100644 --- a/SiteManagementSystem(SoftwareEngineering)/appsettings.json +++ b/SiteManagementSystem(SoftwareEngineering)/appsettings.json @@ -6,7 +6,7 @@ } }, "ConnectionStrings": { - "SQL": "Server=host.docker.internal;Port=3306;Database=SiteManagementSystem;Uid=SiteManagementSystem;Pwd=SiteManagementSystem;" + "SQL": "Server=127.0.0.1;Port=3306;Database=SiteManagementSystem;Uid=SiteManagementSystem;Pwd=SiteManagementSystem;" }, "Jwt": { "SecurityKey": "TheSecretKeyForIwutMail,RandomInfo:z#$WX%ec56rv^b8n",