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 {}
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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