實現類似微信朋友圈功能(二)點贊推送給自己的好友或關注


需求:評論點贊通知跟自己是好友或關注的評論點贊該條說說的人

 

這個功能是點贊和評論接口,在點贊的同時會給自己的朋友 (是在該條說說有聯系的 評論或點贊)進行消息推送

還是跟上一個一樣進行篩選。相同的進行推送。在完成之后感覺有問題。就是出現在推送哪里。微信的是 點贊 推送。取消點贊。但是推送還在。在點贊的情況下。消息不會重復,始終保證數據的唯一性。

而我這個是沒有做處理。在取消的時候,消息不會進行刪除。重新點贊的情況下,消息會重復添加。也就造成了。其實只有一個推送。卻出現很多條數據。

當然解決起來其實也很簡單。我在推送前做個判斷 根據數據來進行查詢。如果數據庫里有數據,則不添加。這樣就保證了數據的唯一性。

直接貼代碼 應該都可以看得懂

 

 

 public static Map<String, Object> createCaseHisTopReview(DispatchContext dctx, Map<String, ? extends Object> context)
    {
        Map<String, Object> result = FastMap.newInstance();
        Delegator delegator = dctx.getDelegator();
        Locale locale = (Locale) context.get("locale");
        GenericValue gv = null;

        if (result.size() > 0)
            return result;

        String caseHisTopRevId = null;
        try
        {
        	if (UtilValidate.isNotEmpty(context.get("caseHisTopRevId")))
		    {
			caseHisTopRevId = context.get("caseHisTopRevId").toString();
		    } else
		    {
			 caseHisTopRevId = delegator.getNextSeqId("CaseHisTopReview");
		    }
        	
        	String reviewTypeEnum = (String) context.get("reviewTypeEnum");
        	String caseHisTopId = (String) context.get("caseHisTopId");
        	String partyId = (String) context.get("partyId");
            if(UtilValidate.isNotEmpty(reviewTypeEnum) && UtilValidate.isNotEmpty(caseHisTopId) &&
            		UtilValidate.isNotEmpty(partyId)){
            	List<GenericValue> CaseHisTopReviewList = delegator.findByAnd("CaseHisTopReview", UtilMisc.toMap("caseHisTopId", caseHisTopId,
            			"partyId", partyId,"reviewTypeEnum", reviewTypeEnum,"thruDate", null),null,false);
            	if(UtilValidate.isNotEmpty(CaseHisTopReviewList) && "reviewTypeEnum_2".equals(reviewTypeEnum)){
            		return ServiceUtil.returnError("已經點過贊!");
            	}
            }else{
            	return ServiceUtil.returnError("請輸入必輸項!!");
            }
        } catch (IllegalArgumentException e)
        {
            Debug.logError(e, module);
            return ServiceUtil.returnError(UtilProperties.getMessage(resourceError, "casehistopreview.id_generation_failure", locale));
        } catch (GenericEntityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

        gv = delegator.makeValue("CaseHisTopReview", UtilMisc.toMap("caseHisTopRevId", caseHisTopRevId));
        gv.setNonPKFields(context);
        if (gv.containsKey("fromDate"))
        {
            gv.set("fromDate", UtilDateTime.nowTimestamp());
        }

        if (gv.containsKey("createUserLogin"))
        {
        	GenericValue userLogin = (GenericValue)context.get("userLogin");
        	if(userLogin!=null)
            gv.set("createUserLogin", userLogin.getString("userLoginId"));
        }
        //得到說說的id
        String caseHisTopId=(String) context.get("caseHisTopId");
        //評論人Id
        String partyId=(String) context.get("partyId");
        List partyIds=new ArrayList();//該評論點贊所有人集合
    	List myFriends=new ArrayList();//我的好友集合
        List newsId=new ArrayList();//要通知的好友ID
        if(UtilValidate.isNotEmpty(caseHisTopId)){
        	//查找該說說的點贊和評論人的ID
        	try {
        		List<GenericValue> CaseHisTopReviewList = delegator.findList("CaseHisTopReview",EntityCondition.makeCondition("caseHisTopId", EntityOperator.EQUALS, caseHisTopId), UtilMisc.toSet("partyId"), null, null, true);//非我屏蔽的好友;
        		if(UtilValidate.isNotEmpty(CaseHisTopReviewList)){
        			List<GenericValue> CaseHisTopReview = EntityUtil.getFieldListFromEntityList(CaseHisTopReviewList, "partyId", true);//非我屏蔽的我關注的人
					if(UtilValidate.isNotEmpty(CaseHisTopReview)){
						partyIds.addAll(CaseHisTopReview);
					}
				}
        		//去重
        		partyIds = new ArrayList(new HashSet(partyIds));
        		
        		//查詢評論人的好友 和關注列表
        		 List<EntityCondition> andExprs = FastList.newInstance();
        		 andExprs.add(EntityCondition.makeCondition("partyId", EntityOperator.EQUALS, partyId));
        		 andExprs.add(EntityCondition.makeCondition("thruDate", EntityOperator.EQUALS, null));
        		 //好友列表
        		List<GenericValue> MyFriendsList = delegator.findList("MyFriends",EntityCondition.makeCondition(andExprs, EntityOperator.AND), UtilMisc.toSet("friendId"), null, null, true);//非我屏蔽的好友;
        		if(UtilValidate.isNotEmpty(MyFriendsList)){
        			List<GenericValue> MyFriendsLists = EntityUtil.getFieldListFromEntityList(MyFriendsList, "friendId", true);//非我屏蔽的我關注的人
					if(UtilValidate.isNotEmpty(MyFriendsLists)){
						myFriends.addAll(MyFriendsLists);
					}
				}
        		//關注列表
        		List<GenericValue> ConcernList = delegator.findList("Concern",EntityCondition.makeCondition(andExprs, EntityOperator.AND), UtilMisc.toSet("beConcernId"), null, null, true);
        		if(UtilValidate.isNotEmpty(ConcernList)){
        			List<GenericValue> ConcernLists = EntityUtil.getFieldListFromEntityList(ConcernList, "beConcernId", true);//非我屏蔽的我關注的人
					if(UtilValidate.isNotEmpty(ConcernLists)){
						myFriends.addAll(ConcernLists);
					}
				}
        		myFriends=new ArrayList(new HashSet(myFriends));
        		//比較自己的好友和其他的用戶評論或點贊。如果是共同好友則推送消息
        		for(int i=0;i<myFriends.size();i++){
    				for(int j=0;j<partyIds.size();j++){
    					if(myFriends.get(i).equals(partyIds.get(j))){
    						newsId.add(partyIds.get(j));
    					}
    				}
    			}
        		
        	} catch (Exception e) {
				// TODO: handle exception
			}
        	
        }
        
        try
        { 
        	//查詢說說內容
        	GenericValue CaseHisTopReviewList = delegator.findOne("CaseHistoryTopic",UtilMisc.toMap("caseHisTopId",caseHisTopId), true);
        	newsId.add(CaseHisTopReviewList.get("partyId"));//添加發起人
        	newsId = new ArrayList(new HashSet(newsId));//去重
        	  String reviewTypeEnum = (String) context.get("reviewTypeEnum");
            gv.create();
            //news 已經得到共同的好友。 這里做消息通知
            for(int i=0;i<newsId.size();i++){
//            	newsId.get(i) (String) context.get("partyId")caseHisTopId reviewTypeEnum
            	List<GenericValue> AcademicNewsList = delegator.findByAnd("AcademicNews", UtilMisc.toMap("caseHisTopId", caseHisTopId,
            			"partyId", (String) context.get("partyId"),"reviewTypeEnum", reviewTypeEnum,"thruDate", null,"receiveId",newsId.get(i)),null,false);
            	//查詢之前有沒有發送過消息。有發送過則不重新發送
            	if(UtilValidate.isEmpty(AcademicNewsList)){
            		 String academicNewsId = delegator.getNextSeqId("AcademicNews");
                     GenericValue newsGv = delegator.makeValue("AcademicNews", UtilMisc.toMap("academicNewsId", academicNewsId));
                     newsGv.set("receiveId",newsId.get(i));//消息接受人
                     newsGv.set("partyId",  (String) context.get("partyId"));//發送人
                 	if(UtilValidate.isNotEmpty(context.get("replyId"))){//判斷回復評論人id
                		 newsGv.set("replyId", context.get("replyId"));
                	}
                 	if(UtilValidate.isNotEmpty(context.get("replyTopRevId"))){//判斷評論id
                		 newsGv.set("replyTopRevId", context.get("replyTopRevId"));
                	}
                     if(UtilValidate.isNotEmpty(caseHisTopId)){
                    	 newsGv.set("caseHisTopId", caseHisTopId);
                    	 if(UtilValidate.isNotEmpty(CaseHisTopReviewList)){
                    		 if(UtilValidate.isNotEmpty(CaseHisTopReviewList.get("imagesPath"))){
                    			 newsGv.set("content", CaseHisTopReviewList.get("imagesPath"));
                    		 }else{
                    			 newsGv.set("content", CaseHisTopReviewList.get("content"));
                    		 }
                    		 
                    	 }
                     }
                   
                     newsGv.set("reviewTypeEnum", reviewTypeEnum);
//                     newsGv.set("partyClient", UtilDateTime.nowTimestamp());
                     newsGv.set("fromDate", UtilDateTime.nowTimestamp());
                     newsGv.create();
            	}
            }
            
            
            
        } catch (GenericEntityException e)
        {
            Debug.logError(e, module);
            return ServiceUtil.returnError("新增失敗");
        }

        if (gv != null)
        {
            result.put("caseHisTopRevId", caseHisTopRevId);
        }
        result.put(ModelService.RESPONSE_MESSAGE, ModelService.RESPOND_SUCCESS);
        return result;
    }

 最主要是我想的邏輯。寫起代碼來很簡單。關鍵就是我們程序員的思維能不能跟得上。

轉載請注明出處:http://www.cnblogs.com/huole/p/5757746.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM