import time from layer import Layer from field import Field from user import User from field_record import FieldRecord class Service: layer = Layer(LAYER) #初始化数据库数据并启动增删查功能 #普通用户操作: #请求一条场地使用信息(普通用户自动传入自己的用户id,管理员用户手动选择传入用户id) #redis #参数:cs_fieldRecord(用户id,场地id,开始时间,结束时间) 返回:bool 是否预约成功 def add_appointment(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 返回:bool 是否结束成功 def end_appointment(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 #获取当前时间 curtime=time.localtime() #正在使用时可以提前结束,修改结束时间 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=time.localtime() 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=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) list_time=[] for x in records: 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: 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 query_appointment_record(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 add_field(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 True #删除一个场地 # 参数:cs_field(id,name,position(null),open_time(null),type(null)) 返回:bool 是否删除成功 def remove_field(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