def SearchBruteForce(self, TheKeyWord): ''' 描述:暴力匹配搜索 参数: 关键词 返回:搜索结果列表 ''' Success = True TheList = [] if Success: try: TheActivityList = Activity.objects.all() except: Success = False print(Success) if Success: try: i = len(TheActivityList) - 1 while i >= 0: item = TheActivityList[i] if JudgeValid.JudgeActivityCanBeSearched(item.ID): TheKey = re.compile(TheKeyWord) MatchResult = TheKey.search(item.Name + ',' + item.Tags) print(MatchResult) if MatchResult: TheInfo = self.GetOneActivityInfo(item.ID) if TheInfo != {}: TheList.append(TheInfo) i -= 1 except: Success = False if Success: return TheList else: return []
def GetOneActivityInfo(self, TheID): TheResult = {} Success = True try: TheActivity = Activity.objects.get(ID=TheID) TheResult["id"] = TheID TheResult["name"] = TheActivity.Name TheResult["place"] = TheActivity.Place TheResult["createTime"] = GlobalFunctions.TimeStampToTimeString( int(TheActivity.CreateTime)) TheResult["start"] = GlobalFunctions.TimeStampToTimeString( int(TheActivity.StartTime)) TheResult["end"] = GlobalFunctions.TimeStampToTimeString( int(TheActivity.EndTime)) TheResult["signupBeginAt"] = GlobalFunctions.TimeStampToTimeString( int(TheActivity.SignUpStartTime)) TheResult["signupStopAt"] = GlobalFunctions.TimeStampToTimeString( int(TheActivity.SignUpEndTime)) TheResult["minUser"] = int(TheActivity.MinUser) TheResult["maxUser"] = int(TheActivity.MaxUser) TheResult["curUser"] = int(TheActivity.CurrentUser) TheResult["type"] = TheActivity.Type TheResult["statusGlobal"] = int(TheActivity.StatusGlobal) TheResult["statusJoin"] = int(TheActivity.StatusJoin) TheResult["statusCheck"] = int(TheActivity.StatusCheck) TheResult["imageUrl"] = GlobalFunctions.GetTrueAvatarUrlActivity( TheActivity.ImageURL) TheResult["tags"] = GlobalFunctions.SplitTags(TheActivity.Tags) #print(TheResult) if JudgeValid.JudgeActivityCanBeSearched(TheID) != True: Success = False except: Success = False if Success: return TheResult else: return {}
def ShowAllActivity(TheLastID, TheMostNumber): ''' 描述:查询所有活动 参数: 最后一个id,最后显示的数目 返回:第一个是一个字典,里面就一个字典数组activityList,字典每个字典有活动具体信息,失败为空 第二个是失败状态信息,成功是空,失败有reason和code ''' #查询 Success = True if Success: try: Info = Activity.objects.all() except: Success = False #处理数据并且返回 Return = {} ErrorInfo = {} Result = [] #print(TheLastID, TheMostNumber) if Success: try: CurrentNumber = 0 i = len(Info) - 1 while i >= 0: item = Info[i] if TheLastID != Constants.UNDEFINED_NUMBER: if item.ID >= TheLastID: i -= 1 continue TheResult = {} TheResult["id"] = item.ID TheResult["name"] = item.Name TheResult["place"] = item.Place TheResult[ "createTime"] = GlobalFunctions.TimeStampToTimeString( int(item.CreateTime)) TheResult["start"] = GlobalFunctions.TimeStampToTimeString( int(item.StartTime)) TheResult["end"] = GlobalFunctions.TimeStampToTimeString( int(item.EndTime)) TheResult[ "signupBeginAt"] = GlobalFunctions.TimeStampToTimeString( int(item.SignUpStartTime)) TheResult[ "signupStopAt"] = GlobalFunctions.TimeStampToTimeString( int(item.SignUpEndTime)) TheResult["minUser"] = int(item.MinUser) TheResult["maxUser"] = int(item.MaxUser) TheResult["curUser"] = int(item.CurrentUser) TheResult["type"] = item.Type TheResult["statusGlobal"] = int(item.StatusGlobal) TheResult["statusJoin"] = int(item.StatusJoin) TheResult["statusCheck"] = int(item.StatusCheck) TheResult["tags"] = GlobalFunctions.SplitTags(item.Tags) TheResult[ "imageUrl"] = GlobalFunctions.GetTrueAvatarUrlActivity( item.ImageURL) if JudgeValid.JudgeActivityCanBeSearched(item.ID): Result.append(TheResult) CurrentNumber = CurrentNumber + 1 if TheMostNumber != Constants.UNDEFINED_NUMBER and CurrentNumber >= TheMostNumber: break i -= 1 except: Success = False if Success == True: Return["activityList"] = Result ErrorInfo = {} else: Return = {} ErrorInfo["reason"] = "查询活动失败!" ErrorInfo["code"] = Constants.ERROR_CODE_UNKNOWN return Return, ErrorInfo
def AdvancedSearch(TheUserID, Information, TheLastSeenID, TheMost): ''' 描述:高级检索 参数:用户openid,检索信息,上一个id,最多 返回:Result, errorinfo ''' Success = True Return = {} ErrorInfo = {} Reason = "" Code = Constants.UNDEFINED_NUMBER SearchDictionary = {} if Success: try: TheUser = User.objects.get(OpenID=TheUserID) except: Success = False Reason = "用户不存在!" Code = Constants.ERROR_CODE_INVALID_PARAMETER #读取修改数据 if Success: try: if "place" in Information: SearchDictionary["place"] = Information["place"] else: SearchDictionary["place"] = "" if "startMin" in Information: SearchDictionary["startMin"] = int( GlobalFunctions.TimeStringToTimeStamp( Information["startMin"])) else: SearchDictionary["startMin"] = 0 if "startMax" in Information: SearchDictionary["startMax"] = int( GlobalFunctions.TimeStringToTimeStamp( Information["startMax"])) else: SearchDictionary["startMax"] = Constants.MAX_NUMBER if "endMin" in Information: SearchDictionary["endMin"] = int( GlobalFunctions.TimeStringToTimeStamp( Information["endMin"])) else: SearchDictionary["endMin"] = 0 if "endMax" in Information: SearchDictionary["endMax"] = int( GlobalFunctions.TimeStringToTimeStamp( Information["endMax"])) else: SearchDictionary["endMax"] = Constants.MAX_NUMBER if "signupBeginAtMin" in Information: SearchDictionary["signupBeginAtMin"] = int( GlobalFunctions.TimeStringToTimeStamp( Information["signupBeginAtMin"])) else: SearchDictionary["signupBeginAtMin"] = 0 if "signupBeginAtMax" in Information: SearchDictionary["signupBeginAtMax"] = int( GlobalFunctions.TimeStringToTimeStamp( Information["signupBeginAtMax"])) else: SearchDictionary["signupBeginAtMax"] = Constants.MAX_NUMBER if "signupStopAtMin" in Information: SearchDictionary["signupStopAtMin"] = int( GlobalFunctions.TimeStringToTimeStamp( Information["signupStopAtMin"])) else: SearchDictionary["signupStopAtMin"] = 0 if "signupStopAtMax" in Information: SearchDictionary["signupStopAtMax"] = int( GlobalFunctions.TimeStringToTimeStamp( Information["signupStopAtMax"])) else: SearchDictionary["signupStopAtMax"] = Constants.MAX_NUMBER if "type" in Information: SearchDictionary["type"] = Information["type"] else: SearchDictionary["type"] = "" if "statusGlobal" in Information: SearchDictionary["statusGlobal"] = Information["statusGlobal"] else: SearchDictionary["statusGlobal"] = Constants.UNDEFINED_NUMBER if "statusJoin" in Information: SearchDictionary["statusJoin"] = Information["statusJoin"] else: SearchDictionary["statusJoin"] = Constants.UNDEFINED_NUMBER if "statusCheck" in Information: SearchDictionary["statusCheck"] = Information["statusCheck"] else: SearchDictionary["statusCheck"] = Constants.UNDEFINED_NUMBER if "selfStatus" in Information: SearchDictionary["selfStatus"] = Information["selfStatus"] else: SearchDictionary["selfStatus"] = Constants.UNDEFINED_NUMBER - 1 if "ruleForMe" in Information: SearchDictionary["ruleForMe"] = Information["ruleForMe"] else: SearchDictionary["ruleForMe"] = Constants.UNDEFINED_NUMBER - 1 except: Success = False Reason = "高级检索格式不合法" Code = Constants.ERROR_CODE_INVALID_PARAMETER if Success: try: JudgeResult = {} JudgeResult = JudgeValid.JudgeSearchStatusValid(SearchDictionary["statusGlobal"], SearchDictionary["statusJoin"], \ SearchDictionary["statusCheck"], SearchDictionary["selfStatus"], SearchDictionary["ruleForMe"]) if JudgeResult["result"] != "success": Success = False Reason = JudgeResult["reason"] Code = JudgeResult["code"] JudgeResult = JudgeValid.JudgeSearchTimeValid( SearchDictionary["startMin"], SearchDictionary["startMax"]) if JudgeResult["result"] != "success": Success = False Reason = "最小开始时间必须小于等于最大开始时间!" Code = Constants.ERROR_CODE_INVALID_PARAMETER JudgeResult = JudgeValid.JudgeSearchTimeValid( SearchDictionary["endMin"], SearchDictionary["endMax"]) if JudgeResult["result"] != "success": Success = False Reason = "最小结束时间必须小于等于最大结束时间!" Code = Constants.ERROR_CODE_INVALID_PARAMETER JudgeResult = JudgeValid.JudgeSearchTimeValid( SearchDictionary["signupBeginAtMin"], SearchDictionary["signupBeginAtMax"]) if JudgeResult["result"] != "success": Success = False Reason = "最小开始报名时间必须小于等于最大开始报名时间!" Code = Constants.ERROR_CODE_INVALID_PARAMETER JudgeResult = JudgeValid.JudgeSearchTimeValid( SearchDictionary["signupStopAtMin"], SearchDictionary["signupStopAtMax"]) if JudgeResult["result"] != "success": Success = False Reason = "最小结束报名时间必须小于等于最大结束报名时间!" Code = Constants.ERROR_CODE_INVALID_PARAMETER except: Success = False Reason = "高级检索格式不合法" Code = Constants.ERROR_CODE_INVALID_PARAMETER SearchResult = [] #查询时间,地点,状态,直接数据库函数 if Success: try: QuerySet = Activity.objects.all() Conditions = {'StartTime__gte': SearchDictionary["startMin"], 'StartTime__lte': SearchDictionary["startMax"],\ 'EndTime__gte': SearchDictionary["endMin"], 'EndTime__lte': SearchDictionary["endMax"],\ 'SignUpStartTime__gte': SearchDictionary["signupBeginAtMin"], 'SignUpStartTime__lte': SearchDictionary["signupBeginAtMax"],\ 'SignUpEndTime__gte': SearchDictionary["signupStopAtMin"], 'SignUpEndTime__lte': SearchDictionary["signupStopAtMax"]} if SearchDictionary["statusGlobal"] != Constants.UNDEFINED_NUMBER: Conditions['StatusGlobal'] = SearchDictionary["statusGlobal"] if SearchDictionary["statusJoin"] != Constants.UNDEFINED_NUMBER: Conditions['StatusJoin'] = SearchDictionary["statusJoin"] if SearchDictionary["statusCheck"] != Constants.UNDEFINED_NUMBER: Conditions['StatusCheck'] = SearchDictionary["statusCheck"] if SearchDictionary["place"] != '': Conditions["Place__icontains"] = SearchDictionary["place"] SearchResult = QuerySet.filter(**Conditions) except: Success = False Reason = "高级检索失败" Code = Constants.ERROR_CODE_UNKNOWN #查询活动类型,加入后结果等 NewSearchResult = [] if Success: try: i = len(SearchResult) - 1 while i >= 0: item = SearchResult[i] WhetherMatch = True if SearchDictionary["type"] != "": if JudgeValid.JudgeActivityTypeMatch( SearchDictionary["type"], item.Type) != True: WhetherMatch = False if SearchDictionary[ "selfStatus"] != Constants.UNDEFINED_NUMBER - 1: TheStatus = JudgeValid.GetSelfStatus(TheUserID, item.ID) if TheStatus != SearchDictionary["selfStatus"]: WhetherMatch = False if SearchDictionary[ "ruleForMe"] != Constants.UNDEFINED_NUMBER - 1: TheRule = JudgeValid.GetSelfJoinStatus(TheUserID, item.ID) if TheRule != SearchDictionary["ruleForMe"]: WhetherMatch = False if JudgeValid.JudgeActivityCanBeSearched(item.ID) != True: WhetherMatch = False if WhetherMatch == True: print(item.ID) TheInfo = QueryActivity(item.ID) TheInfo["id"] = item.ID NewSearchResult.append(TheInfo) i -= 1 except: Success = False Reason = "高级检索失败" Code = Constants.ERROR_CODE_UNKNOWN ReturnList = [] #分页显示 if Success: CurrentNum = 0 WhetherFindStart = False if TheLastSeenID == Constants.UNDEFINED_NUMBER: WhetherFindStart = True for item in NewSearchResult: if WhetherFindStart == True: if TheMost != Constants.UNDEFINED_NUMBER and CurrentNum >= TheMost: break ReturnList.append(item) CurrentNum += 1 if TheLastSeenID != Constants.UNDEFINED_NUMBER and item[ "id"] == TheLastSeenID: WhetherFindStart = True #print(NewSearchResult) if Success == False: ErrorInfo["reason"] = Reason ErrorInfo["code"] = Code else: Return["activityList"] = ReturnList ErrorInfo = {} return Return, ErrorInfo