diff --git a/SiteManagementSystem(SoftwareEngineering)/Service/FieldService.cs b/SiteManagementSystem(SoftwareEngineering)/Service/FieldService.cs index 5c5e969..02de4b1 100644 --- a/SiteManagementSystem(SoftwareEngineering)/Service/FieldService.cs +++ b/SiteManagementSystem(SoftwareEngineering)/Service/FieldService.cs @@ -43,19 +43,17 @@ namespace SiteManagementSystem_SoftwareEngineering_.Service } public void AddField(string name, string value) { - var t = (Field) - _service.AddField( + var t = (bool) + _service.RemoveField( new Field { + Id = Guid.Parse("99b472f1-9912-49df-bb1f-3db0fc5bee11"), Name = "t1", Position = "t2", Opentime = "t3" } ); - Console.WriteLine( - $"{t.Id},{t.Name},{t.Type}" - ); - //t(); + Console.WriteLine(t); //Console.WriteLine(_service.AddField()); throw new NotImplementedException(); } @@ -70,7 +68,7 @@ namespace SiteManagementSystem_SoftwareEngineering_.Service { public readonly SQLHelperService FieldDb; public readonly SQLHelperService RecordDb; - public readonly SQLHelperService FinishedFieldRecordDb; + public readonly SQLHelperService FinishedFieldRecordDb; private readonly ICacheService _cacheService; public EntityFrameworkPythonCompatibilityAndInterpretationLayer(SQLService storageService, ICacheService cacheService) @@ -81,7 +79,7 @@ namespace SiteManagementSystem_SoftwareEngineering_.Service storageService, nameof(storageService.UserFieldRecords) ); - FinishedFieldRecordDb = new SQLHelperService(storageService,nameof(storageService.FinishedFieldRecords)); + FinishedFieldRecordDb = new SQLHelperService(storageService,nameof(storageService.FinishedFieldRecords)); } public void SetTimeOut(DateTime endTime,string info) { diff --git a/SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/demo.py b/SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/demo.py index afd4eaf..282d0c7 100644 --- a/SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/demo.py +++ b/SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/demo.py @@ -3,8 +3,7 @@ from layer import Layer from field import Field from user import User -from user_field import FieldRecord -from datetime import datetime +from field_record import FieldRecord @@ -19,9 +18,9 @@ class Service: #参数:cs_fieldRecord(用户id,场地id,开始时间,结束时间) 返回:bool 是否预约成功 def AddAppointment(self,cs_fieldRecord) -> bool: fieldRecord=FieldRecord(cs_fieldRecord) - records=self.layer.find_record("fid",fieldRecord.fid) + records=self.layer.find_record("Fid",fieldRecord.fid) #如果用户已经有预约了,就不能再提交预约 - if len(self.layer.find_record("uid",fieldRecord.uid))!=0: + if len(self.layer.find_record("Uid",fieldRecord.uid))!=0: raise ValueError("Already has an appointment") else: #检查场地此时是否有空 @@ -34,10 +33,10 @@ class Service: #提前结束场地的使用 正在使用时提前结束 #finished - #参数:cs_user //cs_fieldRecord(用户id,场地id,开始时间,) 返回:bool 是否结束成功 + #参数:cs_user //cs_fieldRecord 返回:bool 是否结束成功 def EndAppointment(self,cs_user) -> bool: user=User(cs_user) - records=self.layer.find_record("uid",user.uid) + records=self.layer.find_record("Uid",user.uid) if len(records)==0: raise ValueError("No appointment") elif len(records) !=1: @@ -46,8 +45,8 @@ class Service: 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") + #获取当前时间 + curtime=time.localtime() #正在使用时可以提前结束,修改结束时间 if curtime>=start_time and curtime bool: user=User(cs_user) - records=self.layer.find_record("uid",user.id) + 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") + curtime=time.localtime() if curtime bool: field_Record=FieldRecord(cs_fieldRecord) - records=self.layer.find_record("uid", field_Record.uid) + 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") + curtime=time.localtime() 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) + records=self.layer.find_record("Fid",fid) list_time=[] for x in records: - tup=(x.start_time,x.end_time) + tup=(time.strftime("%Y-%m-%d %H:%M:%S",x.start_time),time.strftime("%Y-%m-%d %H:%M:%S",x.end_time)) list_time.append(tup) # 使用 sorted() 函数进行排序,key 参数指定用于排序的键函数 - sorted_time_list = sorted(list_time, key=lambda x: self.parse_time(x[0])) + sorted_time_list = sorted(list_time, key=lambda x: x[0]) #从后往前遍历 for x in range(len(sorted_time_list)-1,0,-1): strtm2 = sorted_time_list[x][0] @@ -125,26 +121,47 @@ class Service: return sorted_time_list - - - #查询用户的预约记录 # 参数:cs_user(id) 返回:array_cs_fieldRecord def QueryAppointmentRecord(self,cs_user) -> []: user=User(cs_user) - + cs_fieldRecords=[] + fieldRecords=self.layer.find_record("Uid",user.id) + if len(fieldRecords)==1: + cs_fieldRecords.append(FieldRecord(fieldRecords[0])) + elif len(fieldRecords)!=0: + raise ValueError("Appointment nums error") + fieldRecords=self.layer.find_finished_record("Uid",user.id) + if len(fieldRecords)!=0: + for x in fieldRecords: + cs_fieldRecords.append(FieldRecord.parse_to_csharp_object(FieldRecord(x))) + return cs_fieldRecords + + #管理员操作:(包含普通用户操作以及一下特殊操作) #添加一个场地 #参数:cs_field(id,name,position,open_time,type) 返回:bool 是否添加成功 - def AddField(self, cs_field) -> str: + def AddField(self, cs_field) -> bool: field = Field(cs_field) + fields = self.layer.find_field("Name", field.name) + if len(fields) > 0: + raise ValueError("Duplicated name") self.layer.add_field(field) - return "" + return True #删除一个场地 # 参数:cs_field(id,name,position(null),open_time(null),type(null)) 返回:bool 是否删除成功 + def RemoveField(self,cs_field) -> bool: + field=Field(cs_field) + fields=self.layer.find_field("Id",field.id) + if len(fields) == 0: + raise ValueError("No such field") + if len(fields) != 1: + raise ValueError("Field id duplication") + self.layer.remove_field(field) + return True diff --git a/SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/field.py b/SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/field.py index f3fbb79..0930252 100644 --- a/SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/field.py +++ b/SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/field.py @@ -24,7 +24,7 @@ class Field: self.id = field.Id.ToString() self.name = field.Name self.position = field.Position - self.open_time = field.OpenTime + self.open_time = field.Opentime self.type = field.Type elif len(args) == 5: self.id, self.name, self.position, self.open_time, self.type = args @@ -35,10 +35,11 @@ class Field: return f"Field: Id: {self.id}, Name: {self.name}, Position: {self.position}, Type: {self.type}" def parse_to_csharp_object(self, empty_field): + print(self.id) empty_field.Id = Guid.Parse(self.id) empty_field.Name = self.name empty_field.Position = self.position - empty_field.OpenTime = self.open_time + empty_field.Opentime = self.open_time print(FieldType.UNSPECIFIED) print(self.type) empty_field.Type = self.type diff --git a/SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/fieldRecord.py b/SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/field_record.py similarity index 100% rename from SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/fieldRecord.py rename to SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/field_record.py diff --git a/SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/layer.py b/SiteManagementSystem(SoftwareEngineering)/Service/PythonServiceFile/layer.py index cf9ed64..2e963df 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 FieldRecord +from field_record import FieldRecord clr.AddReference('System') from System import Guid, DateTime @@ -19,10 +19,12 @@ class Layer: # The value property will def find_field(self, key: str, value: str) -> [Field]: - return [Field(t) for t in self._field_db.FindAll(key, Guid.Parse(value))] + if key == "Id": + return [Field(t) for t in self._field_db.FindAll(key, Guid.Parse(value))] + return [Field(t) for t in self._field_db.FindAll(key, value)] def remove_field(self, field: Field) -> 'Layer': - self._field_db.TryDelete(field.id, field.parse_to_csharp_object(self._field_db.GetDefaultEntity()).Id) + self._field_db.TryDelete("Id", field.parse_to_csharp_object(self._field_db.GetDefaultEntity()).Id) return self def add_record(self, record: FieldRecord) -> 'Layer': @@ -37,15 +39,15 @@ class Layer: self._record_db.TryDelete("Uid", record.parse_to_csharp_object(self._record_db.GetDefaultEntity()).Uid) return self - def add_finished_record(self, record: UserFieldRecord) -> 'Layer': + def add_finished_record(self, record: FieldRecord) -> 'Layer': self._finished_field_recoed_db.Add(record.parse_to_csharp_object(self._finished_field_recoed_db.GetDefaultEntity())) return self - def find_finished_record(self, key: str, value: str) -> [UserFieldRecord]: - return [UserFieldRecord(t) for t in self._finished_field_recoed_db.FindAll(key, Guid.Parse(value))] + def find_finished_record(self, key: str, value: str) -> [FieldRecord]: + return [FieldRecord(t) for t in self._finished_field_recoed_db.FindAll(key, Guid.Parse(value))] # One User only allowed to book one field at a time - def remove_finished_record(self, record: UserFieldRecord) -> 'Layer': + def remove_finished_record(self, record: FieldRecord) -> 'Layer': self._finished_field_recoed_db.TryDelete("Uid", record.parse_to_csharp_object(self._finished_field_recoed_db.GetDefaultEntity()).Uid) return self diff --git a/SiteManagementSystem(SoftwareEngineering)/appsettings.json b/SiteManagementSystem(SoftwareEngineering)/appsettings.json index 19222d0..b720ffb 100644 --- a/SiteManagementSystem(SoftwareEngineering)/appsettings.json +++ b/SiteManagementSystem(SoftwareEngineering)/appsettings.json @@ -6,8 +6,8 @@ } }, "ConnectionStrings": { - "Redis": "host.docker.internal:6379,abortConnect=false", - "SQL": "Server=host.docker.internal;Port=3306;Database=SiteManagementSystem;Uid=SiteManagementSystem;Pwd=SiteManagementSystem;" + "Redis": "127.0.0.1:6379,abortConnect=false", + "SQL": "Server=127.0.0.1;Port=3306;Database=SiteManagementSystem;Uid=SiteManagementSystem;Pwd=SiteManagementSystem;" }, "RedisDB": 0, "Jwt": {