需求:評論點贊通知跟自己是好友或關注的評論點贊該條說說的人
這個功能是點贊和評論接口,在點贊的同時會給自己的朋友 (是在該條說說有聯系的 評論或點贊)進行消息推送
還是跟上一個一樣進行篩選。相同的進行推送。在完成之后感覺有問題。就是出現在推送哪里。微信的是 點贊 推送。取消點贊。但是推送還在。在點贊的情況下。消息不會重復,始終保證數據的唯一性。
而我這個是沒有做處理。在取消的時候,消息不會進行刪除。重新點贊的情況下,消息會重復添加。也就造成了。其實只有一個推送。卻出現很多條數據。
當然解決起來其實也很簡單。我在推送前做個判斷 根據數據來進行查詢。如果數據庫里有數據,則不添加。這樣就保證了數據的唯一性。
直接貼代碼 應該都可以看得懂
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