浏览代码

增加消息事件和监听器,部分操作产生消息。

dongbw 8 年之前
父节点
当前提交
ec6fe7a891
共有 69 个文件被更改,包括 1610 次插入507 次删除
  1. 1 5
      donate-console/src/main/java/com/uas/console/donate/controller/ActivityController.java
  2. 1 1
      donate-console/src/main/java/com/uas/console/donate/controller/ActivityRecodeController.java
  3. 1 1
      donate-console/src/main/java/com/uas/console/donate/controller/BaseController.java
  4. 1 1
      donate-console/src/main/java/com/uas/console/donate/controller/CarouselController.java
  5. 1 1
      donate-console/src/main/java/com/uas/console/donate/controller/MessageController.java
  6. 1 1
      donate-console/src/main/java/com/uas/console/donate/controller/OrgController.java
  7. 1 1
      donate-console/src/main/java/com/uas/console/donate/controller/ProjectConcludeController.java
  8. 0 13
      donate-console/src/main/java/com/uas/console/donate/controller/ProjectController.java
  9. 1 1
      donate-console/src/main/java/com/uas/console/donate/controller/ProjectFinanceController.java
  10. 1 1
      donate-console/src/main/java/com/uas/console/donate/controller/ProjectRecodeController.java
  11. 1 1
      donate-console/src/main/java/com/uas/console/donate/controller/ProjectReportController.java
  12. 1 1
      donate-console/src/main/java/com/uas/console/donate/controller/SecurityController.java
  13. 1 5
      donate-console/src/main/java/com/uas/console/donate/controller/UserController.java
  14. 13 0
      donate-console/src/main/java/com/uas/console/donate/dao/MessageDetailDao.java
  15. 0 19
      donate-console/src/main/java/com/uas/console/donate/dao/ProjectEvolveDao.java
  16. 56 0
      donate-console/src/main/java/com/uas/console/donate/event/ActivityPublishEvent.java
  17. 54 0
      donate-console/src/main/java/com/uas/console/donate/event/GetPrizePublishEvent.java
  18. 54 0
      donate-console/src/main/java/com/uas/console/donate/event/ProjectConcludePublishEvent.java
  19. 54 0
      donate-console/src/main/java/com/uas/console/donate/event/ProjectFinancePublishEvent.java
  20. 56 0
      donate-console/src/main/java/com/uas/console/donate/event/ProjectPublishEvent.java
  21. 54 0
      donate-console/src/main/java/com/uas/console/donate/event/ProjectReportPublishEvent.java
  22. 52 0
      donate-console/src/main/java/com/uas/console/donate/event/PublishEvent.java
  23. 209 0
      donate-console/src/main/java/com/uas/console/donate/listener/PublishListener.java
  24. 17 0
      donate-console/src/main/java/com/uas/console/donate/model/Message.java
  25. 14 0
      donate-console/src/main/java/com/uas/console/donate/model/MessageDetail.java
  26. 20 6
      donate-console/src/main/java/com/uas/console/donate/model/ProjectConclude.java
  27. 0 92
      donate-console/src/main/java/com/uas/console/donate/model/ProjectEvolve.java
  28. 24 9
      donate-console/src/main/java/com/uas/console/donate/model/ProjectFinance.java
  29. 22 9
      donate-console/src/main/java/com/uas/console/donate/model/ProjectReport.java
  30. 49 5
      donate-console/src/main/java/com/uas/console/donate/model/UsageBufferedLogger.java
  31. 20 3
      donate-console/src/main/java/com/uas/console/donate/model/UsageLog.java
  32. 7 0
      donate-console/src/main/java/com/uas/console/donate/service/MessageService.java
  33. 0 15
      donate-console/src/main/java/com/uas/console/donate/service/ProjectEvolveService.java
  34. 0 3
      donate-console/src/main/java/com/uas/console/donate/service/impl/ActivityRecodeServiceImpl.java
  35. 11 2
      donate-console/src/main/java/com/uas/console/donate/service/impl/ActivityServiceImpl.java
  36. 60 5
      donate-console/src/main/java/com/uas/console/donate/service/impl/MessageServiceImpl.java
  37. 0 30
      donate-console/src/main/java/com/uas/console/donate/service/impl/ProjectEvolveServiceImpl.java
  38. 33 5
      donate-console/src/main/java/com/uas/console/donate/service/impl/ProjectServiceImpl.java
  39. 2 3
      donate-service/src/main/java/com/uas/service/donate/SSOConfiguration.java
  40. 5 0
      donate-service/src/main/java/com/uas/service/donate/controller/AlipayController.java
  41. 7 7
      donate-service/src/main/java/com/uas/service/donate/controller/ProjectReportController.java
  42. 4 1
      donate-service/src/main/java/com/uas/service/donate/controller/WxpayController.java
  43. 29 0
      donate-service/src/main/java/com/uas/service/donate/dao/MessageDetailDao.java
  44. 0 17
      donate-service/src/main/java/com/uas/service/donate/dao/ProjectEvolveDao.java
  45. 4 0
      donate-service/src/main/java/com/uas/service/donate/dao/ProjectRecodeDao.java
  46. 3 0
      donate-service/src/main/java/com/uas/service/donate/dao/ProjectReportDao.java
  47. 57 0
      donate-service/src/main/java/com/uas/service/donate/event/ActivityJoinedPublishEvent.java
  48. 54 0
      donate-service/src/main/java/com/uas/service/donate/event/ProjectJoinedPublishEvent.java
  49. 0 67
      donate-service/src/main/java/com/uas/service/donate/event/ProjectPublishEvent.java
  50. 57 0
      donate-service/src/main/java/com/uas/service/donate/event/TakePrizePublishEvent.java
  51. 175 7
      donate-service/src/main/java/com/uas/service/donate/listener/PublishListener.java
  52. 17 0
      donate-service/src/main/java/com/uas/service/donate/model/Message.java
  53. 14 0
      donate-service/src/main/java/com/uas/service/donate/model/MessageDetail.java
  54. 17 4
      donate-service/src/main/java/com/uas/service/donate/model/Project.java
  55. 34 6
      donate-service/src/main/java/com/uas/service/donate/model/ProjectConclude.java
  56. 0 90
      donate-service/src/main/java/com/uas/service/donate/model/ProjectEvolve.java
  57. 38 8
      donate-service/src/main/java/com/uas/service/donate/model/ProjectFinance.java
  58. 34 5
      donate-service/src/main/java/com/uas/service/donate/model/ProjectReport.java
  59. 48 4
      donate-service/src/main/java/com/uas/service/donate/model/UsageBufferedLogger.java
  60. 20 3
      donate-service/src/main/java/com/uas/service/donate/model/UsageLog.java
  61. 7 0
      donate-service/src/main/java/com/uas/service/donate/service/MessageService.java
  62. 0 14
      donate-service/src/main/java/com/uas/service/donate/service/ProjectEvolveService.java
  63. 6 0
      donate-service/src/main/java/com/uas/service/donate/service/ProjectReportService.java
  64. 5 1
      donate-service/src/main/java/com/uas/service/donate/service/impl/ActivityRecodeServiceImpl.java
  65. 6 5
      donate-service/src/main/java/com/uas/service/donate/service/impl/ActivityServiceImpl.java
  66. 69 3
      donate-service/src/main/java/com/uas/service/donate/service/impl/MessageServiceImpl.java
  67. 0 25
      donate-service/src/main/java/com/uas/service/donate/service/impl/ProjectEvolveServiceImpl.java
  68. 6 0
      donate-service/src/main/java/com/uas/service/donate/service/impl/ProjectReportServiceImpl.java
  69. 1 1
      donate-service/src/main/webapp/resources/js/common/query/Project.js

+ 1 - 5
donate-console/src/main/java/com/uas/console/donate/controller/ActivityController.java

@@ -2,10 +2,7 @@ package com.uas.console.donate.controller;
 
 
 import com.alibaba.fastjson.JSONObject;
-import com.uas.console.donate.model.Activity;
-import com.uas.console.donate.model.Attach;
-import com.uas.console.donate.model.Project;
-import com.uas.console.donate.model.SearchFilter;
+import com.uas.console.donate.model.*;
 import com.uas.console.donate.service.ActivityService;
 import com.uas.console.donate.util.StringUtils;
 import com.uas.dfs.service.FileClient;
@@ -13,7 +10,6 @@ import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
 import com.uas.platform.core.web.bind.RequestState;
-import com.uas.service.donate.model.UsageBufferedLogger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;

+ 1 - 1
donate-console/src/main/java/com/uas/console/donate/controller/ActivityRecodeController.java

@@ -2,10 +2,10 @@ package com.uas.console.donate.controller;
 
 import com.alibaba.fastjson.JSONObject;
 import com.uas.console.donate.model.ActivityRecode;
+import com.uas.console.donate.model.UsageBufferedLogger;
 import com.uas.console.donate.service.ActivityRecodeService;
 import com.uas.console.donate.service.ActivityService;
 import com.uas.platform.core.logging.BufferedLoggerManager;
-import com.uas.service.donate.model.UsageBufferedLogger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;

+ 1 - 1
donate-console/src/main/java/com/uas/console/donate/controller/BaseController.java

@@ -1,8 +1,8 @@
 package com.uas.console.donate.controller;
 
+import com.uas.console.donate.model.UsageBufferedLogger;
 import com.uas.dfs.service.FileClient;
 import com.uas.platform.core.logging.BufferedLoggerManager;
-import com.uas.service.donate.model.UsageBufferedLogger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;

+ 1 - 1
donate-console/src/main/java/com/uas/console/donate/controller/CarouselController.java

@@ -1,9 +1,9 @@
 package com.uas.console.donate.controller;
 
 import com.alibaba.fastjson.JSONObject;
+import com.uas.console.donate.model.UsageBufferedLogger;
 import com.uas.console.donate.service.CarouselService;
 import com.uas.platform.core.logging.BufferedLoggerManager;
-import com.uas.service.donate.model.UsageBufferedLogger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;

+ 1 - 1
donate-console/src/main/java/com/uas/console/donate/controller/MessageController.java

@@ -2,12 +2,12 @@ package com.uas.console.donate.controller;
 
 import com.uas.console.donate.model.Message;
 import com.uas.console.donate.model.SearchFilter;
+import com.uas.console.donate.model.UsageBufferedLogger;
 import com.uas.console.donate.service.MessageService;
 import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
 import com.uas.platform.core.util.serializer.FlexJsonUtils;
-import com.uas.service.donate.model.UsageBufferedLogger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.web.bind.annotation.*;

+ 1 - 1
donate-console/src/main/java/com/uas/console/donate/controller/OrgController.java

@@ -3,13 +3,13 @@ package com.uas.console.donate.controller;
 import com.alibaba.fastjson.JSONObject;
 import com.uas.console.donate.model.Org;
 import com.uas.console.donate.model.SearchFilter;
+import com.uas.console.donate.model.UsageBufferedLogger;
 import com.uas.console.donate.service.OrgService;
 import com.uas.dfs.service.FileClient;
 import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
 import com.uas.platform.core.web.bind.RequestState;
-import com.uas.service.donate.model.UsageBufferedLogger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Controller;

+ 1 - 1
donate-console/src/main/java/com/uas/console/donate/controller/ProjectConcludeController.java

@@ -2,10 +2,10 @@ package com.uas.console.donate.controller;
 
 import com.alibaba.fastjson.JSONObject;
 import com.uas.console.donate.model.ProjectConclude;
+import com.uas.console.donate.model.UsageBufferedLogger;
 import com.uas.console.donate.service.ProjectConcludeService;
 import com.uas.dfs.service.FileClient;
 import com.uas.platform.core.logging.BufferedLoggerManager;
-import com.uas.service.donate.model.UsageBufferedLogger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;

+ 0 - 13
donate-console/src/main/java/com/uas/console/donate/controller/ProjectController.java

@@ -10,7 +10,6 @@ import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
 import com.uas.platform.core.web.bind.RequestState;
-import com.uas.service.donate.model.UsageBufferedLogger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Controller;
@@ -29,8 +28,6 @@ import java.util.List;
 @RequestMapping("/project")
 public class ProjectController {
 
-    private static final SimpleDateFormat codesdf=new SimpleDateFormat("yyyyMMddhhmmsssss");
-
     @Autowired
     private ProjectService projectService ;
 
@@ -159,16 +156,6 @@ public class ProjectController {
             String file4=fileClient.upload(mobileListImg.getBytes(),mobileListImg.getSize(),"jpg",null);
             project.setListImg(file4);
         }
-        Date date=new Date();
-        //设置项目提交时间
-        project.setSubmitTime(date);
-        //设置项目编号
-        project.setCode(codesdf.format(date));
-        //设置项目默认参与人数
-        project.setJoinAmount(0L);
-        //设置默认项目已筹集总金额
-        project.setTotalAmount(0.00);
-
         Project pro = projectService.submit(project);
         logger.log("项目", "提交项目", null, pro.getCode(), pro.getId());
         return pro;

+ 1 - 1
donate-console/src/main/java/com/uas/console/donate/controller/ProjectFinanceController.java

@@ -2,11 +2,11 @@ package com.uas.console.donate.controller;
 
 import com.alibaba.fastjson.JSONObject;
 import com.uas.console.donate.model.ProjectFinance;
+import com.uas.console.donate.model.UsageBufferedLogger;
 import com.uas.console.donate.service.FileService;
 import com.uas.console.donate.service.ProjectFinanceService;
 import com.uas.dfs.service.FileClient;
 import com.uas.platform.core.logging.BufferedLoggerManager;
-import com.uas.service.donate.model.UsageBufferedLogger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;

+ 1 - 1
donate-console/src/main/java/com/uas/console/donate/controller/ProjectRecodeController.java

@@ -3,11 +3,11 @@ package com.uas.console.donate.controller;
 import com.alibaba.fastjson.JSONObject;
 import com.uas.console.donate.model.ProjectRecode;
 import com.uas.console.donate.model.SearchFilter;
+import com.uas.console.donate.model.UsageBufferedLogger;
 import com.uas.console.donate.service.ProjectRecodeService;
 import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
-import com.uas.service.donate.model.UsageBufferedLogger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.web.bind.annotation.PathVariable;

+ 1 - 1
donate-console/src/main/java/com/uas/console/donate/controller/ProjectReportController.java

@@ -3,10 +3,10 @@ package com.uas.console.donate.controller;
 
 import com.alibaba.fastjson.JSONObject;
 import com.uas.console.donate.model.ProjectReport;
+import com.uas.console.donate.model.UsageBufferedLogger;
 import com.uas.console.donate.service.ProjectReportService;
 import com.uas.dfs.service.FileClient;
 import com.uas.platform.core.logging.BufferedLoggerManager;
-import com.uas.service.donate.model.UsageBufferedLogger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;

+ 1 - 1
donate-console/src/main/java/com/uas/console/donate/controller/SecurityController.java

@@ -2,12 +2,12 @@ package com.uas.console.donate.controller;
 
 import com.uas.account.entity.UserView;
 import com.uas.console.donate.core.support.SystemSession;
+import com.uas.console.donate.model.UsageBufferedLogger;
 import com.uas.console.donate.model.User;
 import com.uas.console.donate.service.UserService;
 import com.uas.console.donate.util.FastjsonUtils;
 import com.uas.console.donate.web.CommonController;
 import com.uas.platform.core.logging.BufferedLoggerManager;
-import com.uas.service.donate.model.UsageBufferedLogger;
 import com.uas.sso.AuthToken;
 import com.uas.sso.SSOConfig;
 import com.uas.sso.SSOHelper;

+ 1 - 5
donate-console/src/main/java/com/uas/console/donate/controller/UserController.java

@@ -1,17 +1,13 @@
 package com.uas.console.donate.controller;
 
 import com.alibaba.fastjson.JSONObject;
-import com.uas.console.donate.model.ActivityRecode;
-import com.uas.console.donate.model.ProjectRecode;
-import com.uas.console.donate.model.SearchFilter;
-import com.uas.console.donate.model.User;
+import com.uas.console.donate.model.*;
 import com.uas.console.donate.service.UserService;
 import com.uas.console.donate.web.CommonController;
 import com.uas.platform.core.logging.BufferedLoggerManager;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
 import com.uas.platform.core.web.bind.RequestState;
-import com.uas.service.donate.model.UsageBufferedLogger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Controller;

+ 13 - 0
donate-console/src/main/java/com/uas/console/donate/dao/MessageDetailDao.java

@@ -3,7 +3,11 @@ package com.uas.console.donate.dao;
 import com.uas.console.donate.model.MessageDetail;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * Created by dongbw
@@ -12,4 +16,13 @@ import org.springframework.stereotype.Repository;
 @Repository
 public interface MessageDetailDao extends JpaRepository<MessageDetail, Long>, JpaSpecificationExecutor<MessageDetail>{
 
+    /**
+     * 将消息设置成已推送
+     *
+     * @param ids messageDetail id
+     */
+    @Modifying
+    @Transactional
+    @Query("update MessageDetail o set o.pushStatus = 1 where o.id in :ids")
+    void setPushedByIds(@Param("ids") Object[] ids);
 }

+ 0 - 19
donate-console/src/main/java/com/uas/console/donate/dao/ProjectEvolveDao.java

@@ -1,19 +0,0 @@
-package com.uas.console.donate.dao;
-
-import com.uas.console.donate.model.ProjectEvolve;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-import org.springframework.data.jpa.repository.Query;
-
-import java.util.List;
-
-public interface ProjectEvolveDao extends JpaRepository<ProjectEvolve,Long>,JpaSpecificationExecutor<ProjectEvolve> {
-    //展示所有的机构
-    List<ProjectEvolve> findAll();
-
-    //删除某一条进度
-    @Query("delete  from ProjectEvolve where id=:id")
-    ProjectEvolve deleteById(Long id);
-
-    List<ProjectEvolve> findByProId(Long proId);
-}

+ 56 - 0
donate-console/src/main/java/com/uas/console/donate/event/ActivityPublishEvent.java

@@ -0,0 +1,56 @@
+package com.uas.console.donate.event;
+
+
+import com.uas.console.donate.model.Activity;
+import com.uas.console.donate.model.Message;
+import com.uas.console.donate.model.MessageDetail;
+
+import java.util.List;
+
+/**
+ * 发布活动时时生成消息事件
+ * Created by dongbw
+ * 2018年1月5日 17:44:38
+ */
+public class ActivityPublishEvent extends PublishEvent<MessageDetail, Activity> {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public ActivityPublishEvent(List<Activity> savedList) {
+        super(savedList);
+    }
+
+    /**
+     * 生成对应消息记录
+     *
+     * @param activity 活动
+     * @return 消息
+     */
+    @Override
+	public MessageDetail release(Activity activity) {
+        //TODO 新活动发布时,产生消息
+        // 发起人UU
+        Long userUU = activity.getUserUU();
+        // 类型
+        String type = "消息提醒";
+        // 来源表
+        String table = "donate$activity";
+        // 来源id
+        Long sourceId = activity.getId();
+        // url
+        String url = "/project#/detail/" + activity.getId();
+        // 标题
+        String title = "一元捐消息提醒";
+        // 内容
+        String context = "新活动发布:" + activity.getName() + "(" + activity.getCode() + ")";
+        // 接收对象
+        String receiver = "所有人";
+        Message message = new Message(userUU, title, context, type, table, sourceId, url, receiver);
+        MessageDetail messageDetail = new MessageDetail();
+        messageDetail.setMessage(message);
+        return messageDetail;
+    }
+}

+ 54 - 0
donate-console/src/main/java/com/uas/console/donate/event/GetPrizePublishEvent.java

@@ -0,0 +1,54 @@
+package com.uas.console.donate.event;
+
+
+import com.uas.console.donate.model.*;
+
+import java.util.List;
+
+/**
+ * 中奖消息事件
+ * Created by dongbw
+ * 2018年1月8日
+ */
+public class GetPrizePublishEvent extends PublishEvent<MessageDetail, ActivityRecode> {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public GetPrizePublishEvent(List<ActivityRecode> savedList) {
+        super(savedList);
+    }
+
+    /**
+     * 生成对应消息记录
+     *
+     * @param recode 活动参与记录
+     * @return 消息
+     */
+    @Override
+	public MessageDetail release(ActivityRecode recode) {
+        Activity activity = recode.getActivity();
+        // 发起人UU
+        Long userUU = activity.getUserUU();
+        // 类型
+        String type = "活动消息";
+        // 来源表
+        String table = "donate$activityrecode";
+        // 来源id
+        Long sourceId = recode.getId();
+        // url
+        String url = "/activity#/detail/" + activity.getId();
+        // 标题
+        String title = "活动中奖";
+        // 内容
+        String context = "您参与的活动:" + activity.getName() + "(" + activity.getCode() + ")中奖了,奖品为:" + recode.getAward().getAwardName() +"(" + recode.getAward().getAwardLevel() + ")!";
+        // 接收对象
+        String receiver = recode.getUser().getName();
+        Message message = new Message(userUU, title, context, type, table, sourceId, url, receiver);
+        MessageDetail messageDetail = new MessageDetail(recode.getUuid());
+        messageDetail.setMessage(message);
+        return messageDetail;
+    }
+}

+ 54 - 0
donate-console/src/main/java/com/uas/console/donate/event/ProjectConcludePublishEvent.java

@@ -0,0 +1,54 @@
+package com.uas.console.donate.event;
+
+
+import com.uas.console.donate.model.*;
+
+import java.util.List;
+
+/**
+ * 项目结项时生成消息事件
+ * Created by dongbw
+ * 2018年1月8日
+ */
+public class ProjectConcludePublishEvent extends PublishEvent<MessageDetail, ProjectConclude> {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public ProjectConcludePublishEvent(List<ProjectConclude> savedList) {
+        super(savedList);
+    }
+
+    /**
+     * 生成对应消息记录
+     *
+     * @param projectConclude 项目进度
+     * @return 消息
+     */
+    @Override
+	public MessageDetail release(ProjectConclude projectConclude) {
+        Project project = projectConclude.getProject();
+        // 发起人UU
+        Long userUU = project.getUserUU();
+        // 类型
+        String type = "项目相关";
+        // 来源表
+        String table = "donate$projectconclude";
+        // 来源id
+        Long sourceId = projectConclude.getId();
+        // url
+        String url = "/project#/detail/" + project.getId();
+        // 标题
+        String title = "项目结项";
+        // 内容
+        String context = "您参与过的项目:" + project.getName() + "(" + project.getCode() + ")已发布结项报告!";
+        // 接收对象
+        String receiver = "项目参与人";
+        Message message = new Message(userUU, title, context, type, table, sourceId, url, receiver);
+        MessageDetail messageDetail = new MessageDetail();
+        messageDetail.setMessage(message);
+        return messageDetail;
+    }
+}

+ 54 - 0
donate-console/src/main/java/com/uas/console/donate/event/ProjectFinancePublishEvent.java

@@ -0,0 +1,54 @@
+package com.uas.console.donate.event;
+
+
+import com.uas.console.donate.model.*;
+
+import java.util.List;
+
+/**
+ * 发布项目财务报告时生成消息事件
+ * Created by dongbw
+ * 2018年1月8日
+ */
+public class ProjectFinancePublishEvent extends PublishEvent<MessageDetail, ProjectFinance> {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public ProjectFinancePublishEvent(List<ProjectFinance> savedList) {
+        super(savedList);
+    }
+
+    /**
+     * 生成对应消息记录
+     *
+     * @param projectFinance 项目财务报告
+     * @return 消息
+     */
+    @Override
+	public MessageDetail release(ProjectFinance projectFinance) {
+        Project project = projectFinance.getProject();
+        // 发起人UU
+        Long userUU = project.getUserUU();
+        // 类型
+        String type = "项目相关";
+        // 来源表
+        String table = "donate$projectfinance";
+        // 来源id
+        Long sourceId = projectFinance.getId();
+        // url
+        String url = "/project#/detail/" + project.getId();
+        // 标题
+        String title = "项目财务信息发布";
+        // 内容
+        String context = "您参与过的项目:" + project.getName() + "(" + project.getCode() + ")有新的财务报告!";
+        // 接收对象
+        String receiver = "项目参与人";
+        Message message = new Message(userUU, title, context, type, table, sourceId, url, receiver);
+        MessageDetail messageDetail = new MessageDetail();
+        messageDetail.setMessage(message);
+        return messageDetail;
+    }
+}

+ 56 - 0
donate-console/src/main/java/com/uas/console/donate/event/ProjectPublishEvent.java

@@ -0,0 +1,56 @@
+package com.uas.console.donate.event;
+
+
+import com.uas.console.donate.model.Message;
+import com.uas.console.donate.model.MessageDetail;
+import com.uas.console.donate.model.Project;
+
+import java.util.List;
+
+/**
+ * 发布项目时时生成消息事件
+ * Created by dongbw
+ * 2018年1月5日
+ */
+public class ProjectPublishEvent extends PublishEvent<MessageDetail, Project> {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public ProjectPublishEvent(List<Project> savedList) {
+        super(savedList);
+    }
+
+    /**
+     * 生成对应消息记录
+     *
+     * @param project 项目
+     * @return 消息
+     */
+    @Override
+	public MessageDetail release(Project project) {
+        //TODO 新项目发布时,产生消息
+        // 发起人UU
+        Long userUU = project.getUserUU();
+        // 类型
+        String type = "消息提醒";
+        // 来源表
+        String table = "donate$project";
+        // 来源id
+        Long sourceId = project.getId();
+        // url
+        String url = "/project#/detail/" + project.getId();
+        // 标题
+        String title = "一元捐消息提醒";
+        // 内容
+        String context = "新项目发布:" + project.getName() + "(" + project.getCode() + ")";
+        // 接收对象
+        String receiver = "所有人";
+        Message message = new Message(userUU, title, context, type, table, sourceId, url, receiver);
+        MessageDetail messageDetail = new MessageDetail();
+        messageDetail.setMessage(message);
+        return messageDetail;
+    }
+}

+ 54 - 0
donate-console/src/main/java/com/uas/console/donate/event/ProjectReportPublishEvent.java

@@ -0,0 +1,54 @@
+package com.uas.console.donate.event;
+
+
+import com.uas.console.donate.model.*;
+
+import java.util.List;
+
+/**
+ * 发布项目进度时生成消息事件
+ * Created by dongbw
+ * 2018年1月8日
+ */
+public class ProjectReportPublishEvent extends PublishEvent<MessageDetail, ProjectReport> {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public ProjectReportPublishEvent(List<ProjectReport> savedList) {
+        super(savedList);
+    }
+
+    /**
+     * 生成对应消息记录
+     *
+     * @param projectReport 项目进度
+     * @return 消息
+     */
+    @Override
+	public MessageDetail release(ProjectReport projectReport) {
+        Project project = projectReport.getProject();
+        // 发起人UU
+        Long userUU = project.getUserUU();
+        // 类型
+        String type = "项目相关";
+        // 来源表
+        String table = "donate$projectreport";
+        // 来源id
+        Long sourceId = projectReport.getId();
+        // url
+        String url = "/project#/detail/" + project.getId();
+        // 标题
+        String title = "项目进度发布";
+        // 内容
+        String context = "您参与过的项目:" + project.getName() + "(" + project.getCode() + ")有新的项目进度!";
+        // 接收对象
+        String receiver = "项目参与人";
+        Message message = new Message(userUU, title, context, type, table, sourceId, url, receiver);
+        MessageDetail messageDetail = new MessageDetail();
+        messageDetail.setMessage(message);
+        return messageDetail;
+    }
+}

+ 52 - 0
donate-console/src/main/java/com/uas/console/donate/event/PublishEvent.java

@@ -0,0 +1,52 @@
+package com.uas.console.donate.event;
+
+import org.springframework.context.ApplicationEvent;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * 新增消息事件*
+ * @param <S>
+ *            生成的消息记录
+ * @param <T>
+ *            原单据
+ * @author yingp
+ * 
+ */
+public abstract class PublishEvent<S, T> extends ApplicationEvent {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	private List<T> savedList;
+
+	public PublishEvent(List<T> savedList) {
+		super(savedList);
+		this.savedList = savedList;
+	}
+
+	/**
+	 *
+	 *
+	 * @return
+	 */
+	public final List<S> release() {
+		List<S> releaseList = new ArrayList<S>();
+		for (T saved : savedList)
+			releaseList.add(release(saved));
+		return releaseList;
+	}
+
+	/**
+	 * 生成对应消息记录
+	 * 
+	 * @param saved
+	 * @return
+	 */
+	public abstract S release(T saved);
+
+}

+ 209 - 0
donate-console/src/main/java/com/uas/console/donate/listener/PublishListener.java

@@ -0,0 +1,209 @@
+package com.uas.console.donate.listener;
+
+import com.uas.console.donate.dao.*;
+import com.uas.console.donate.event.*;
+import com.uas.console.donate.model.*;
+import com.uas.console.donate.service.MessageService;
+import com.uas.platform.core.logging.BufferedLoggerManager;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationListener;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * 监听发布事件<br>
+ * 产生消息
+ * @author dongbw 2018年1月4日 14:02:49
+ */
+@Component
+public class PublishListener implements ApplicationListener<PublishEvent<?, ?>> {
+
+	@Autowired
+	private MessageDetailDao messageDetailDao;
+
+	@Autowired
+	private MessageDao messageDao;
+
+	@Autowired
+	private UserDao userDao;
+
+	@Autowired
+	private MessageService messageService;
+
+	@Autowired
+	private ProjectReportDao projectReportDao;
+
+	@Autowired
+	private ProjectFinanceDao projectFinanceDao;
+
+	@Autowired
+	private ProjectConcludeDao projectConcludeDao;
+
+	@Autowired
+	private ProjectRecodeDao projectRecodeDao;
+
+	private static final UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
+
+
+	/**
+	 * 监听事件,产生消息
+	 * @param event  事件
+	 */
+	@SuppressWarnings("unchecked")
+	@Async
+	@Override
+	public void onApplicationEvent(final PublishEvent<?, ?> event) {
+		List<MessageDetail> messageDetailList = (List<MessageDetail>) event.release();
+		// TODO 事件触发监听器产生消息
+		// 发布项目事件 || 发布活动事件
+		if (event instanceof ProjectPublishEvent || event instanceof ActivityPublishEvent) {
+			// 发布消息
+			PublishAllUsersReceived(messageDetailList);
+		// 项目相关内容发布
+		} else if (event instanceof ProjectReportPublishEvent || event instanceof ProjectFinancePublishEvent || event instanceof ProjectConcludePublishEvent) {
+			// 发布消息
+			PublishProjectRelatedUsers(messageDetailList);
+		// 活动中奖
+		} else if (event instanceof GetPrizePublishEvent) {
+			PublishOneUser(messageDetailList);
+		}
+
+	}
+
+	/**
+	 * 对所有用户发送消息
+	 * @param messageDetailList 消息list
+	 */
+	private void PublishAllUsersReceived (List<MessageDetail> messageDetailList) {
+		List<MessageDetail> saveDetails = new ArrayList<>();
+		for (MessageDetail detail : messageDetailList) {
+			Message message = detail.getMessage();
+			if (null != message.getUserUU()) { // 确保消息有效才继续
+				// 查找所有用户
+				List<User> receiverUsers = userDao.findAll();
+				// 生成消息
+				createMessage(message, receiverUsers, saveDetails);
+			}
+			logger.log("消息提醒", "产生消息提醒", message.getTitle(), null, message.getId());
+		}
+		saveDetails = messageDetailDao.save(saveDetails);
+		// 推送消息到手机APP
+		pushMessageToApp(saveDetails);
+	}
+
+	/**
+	 * 对参与项目的人发送消息
+	 * @param messageDetailList 消息list
+	 */
+	private void PublishProjectRelatedUsers(List<MessageDetail> messageDetailList) {
+		List<MessageDetail> saveDetails = new ArrayList<>();
+		for (MessageDetail detail : messageDetailList) {
+			Message message = detail.getMessage();
+			if (null != message.getTable() && null != message.getSourceId()) { // 确保消息有效才继续
+				// 查找接收消息用户
+				List<User> receiverUsers = getReceivedUsers(message.getTable(), message.getSourceId());
+				// 生成消息
+				createMessage(message, receiverUsers, saveDetails);
+			}
+			logger.log("消息提醒", "产生消息提醒", message.getTitle(), null, message.getId());
+		}
+		saveDetails = messageDetailDao.save(saveDetails);
+		// 推送消息到手机APP
+		pushMessageToApp(saveDetails);
+	}
+
+	/**
+	 * 为单个用户产生消息
+	 * @param messageDetailList 消息list
+	 */
+	private void PublishOneUser(List<MessageDetail> messageDetailList) {
+		List<MessageDetail> saveDetails = new ArrayList<>();
+		for (MessageDetail detail : messageDetailList) {
+			Message message = detail.getMessage();
+			saveDetails.add(detail);
+			logger.log("消息提醒", "产生消息提醒", message.getTitle(), null, message.getId(), detail.getReceiveUserUU());
+		}
+		saveDetails = messageDetailDao.save(saveDetails);
+		// 推送消息到手机APP
+		pushMessageToApp(saveDetails);
+	}
+
+	/**
+	 * 根据来源表和来源id获取接收用户
+	 * @param table 来源表
+	 * @param sourceId 来源id
+	 * @return
+	 */
+	private List<User> getReceivedUsers(String table, Long sourceId) {
+		List<User> users = new ArrayList<>();
+		Project project = new Project();
+		// 获取对应项目
+		switch(table) {
+			case "donate$projectreport":
+				ProjectReport report = projectReportDao.findOne(sourceId);
+				project = report.getProject();
+				break;
+			case "donate$projectfinance":
+				ProjectFinance finance = projectFinanceDao.findOne(sourceId);
+				project = finance.getProject();
+				break;
+			case "donate$projectconclude":
+				ProjectConclude conclude = projectConcludeDao.findOne(sourceId);
+				project = conclude.getProject();
+				break;
+
+		}
+		if (null != project.getId()) {
+			List<ProjectRecode> recodes = projectRecodeDao.findProjectDetail(project.getId());
+			for(ProjectRecode recode : recodes) {
+				users.add(recode.getUser());
+			}
+		}
+		return users;
+	}
+
+	/**
+	 * 推送消息到App
+	 * @param saveDetails 详细详情list
+	 */
+	private void pushMessageToApp(List<MessageDetail> saveDetails) {
+		try {
+			// 推送消息
+			messageService.pushReleases(saveDetails);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * 产生消息
+	 * @param message  消息
+	 * @param receiverUsers  接受人UU
+	 * @param saveDetails  保存的消息详情list
+	 */
+	private void createMessage ( Message message, List<User> receiverUsers, List<MessageDetail> saveDetails) {
+		// 用于存储需要接收消息的用户UU
+		Set<Long> userUUs = new HashSet<>();
+		// 设置接收人数
+		message.setReceiverNum(receiverUsers.size());
+		// 为用户新增消息(这里是所有人时,效率非常低,之后需要优化)
+		for (User user : receiverUsers) {
+			try { //去除userUU为空值的情况
+				if (null != user.getUserUU() && !userUUs.contains(user.getUserUU())) {
+					MessageDetail messageDetail = new MessageDetail(user.getUserUU());
+					messageDetail.setMessage(message);
+					saveDetails.add(messageDetail);
+					userUUs.add(user.getUserUU());
+				}
+			} catch (RuntimeException e) {
+				e.getStackTrace();
+			}
+		}
+	}
+
+}

+ 17 - 0
donate-console/src/main/java/com/uas/console/donate/model/Message.java

@@ -115,6 +115,23 @@ public class Message implements Serializable {
     @Column(name = "dm_receivernum")
     private Integer receiverNum;
 
+    public Message() {
+    }
+
+    public Message(Long userUU, String title, String context, String type, String table, Long sourceId, String url, String receiver) {
+        this.userUU = userUU;
+        this.title = title;
+        this.context = context;
+        this.type = type;
+        this.table = table;
+        this.sourceId = sourceId;
+        this.url = url;
+        this.receiver = receiver;
+        this.date = new Date();
+        this.publishDate = new Date();
+        this.readerNum = 0;
+    }
+
     public Long getId() {
         return id;
     }

+ 14 - 0
donate-console/src/main/java/com/uas/console/donate/model/MessageDetail.java

@@ -1,5 +1,7 @@
 package com.uas.console.donate.model;
 
+import com.uas.platform.core.model.Constant;
+
 import javax.persistence.*;
 import java.io.Serializable;
 import java.util.Date;
@@ -75,6 +77,18 @@ public class MessageDetail implements Serializable{
     @JoinColumn(name = "dmd_dmid", nullable = false)
     private Message message;
 
+    public MessageDetail() {
+
+    }
+
+    public MessageDetail(Long userUU) {
+        this.receiveUserUU = userUU;
+        this.readStatus = Constant.NO;
+        this.pushStatus = Constant.NO;
+        this.status = Constant.NO;
+        this.totalStatus = Constant.NO;
+    }
+
     public Long getId() {
         return id;
     }

+ 20 - 6
donate-console/src/main/java/com/uas/console/donate/model/ProjectConclude.java

@@ -13,38 +13,44 @@ public class ProjectConclude {
      */
     @Id
     @GeneratedValue(strategy= GenerationType.IDENTITY)
-    @Column(name = "id")
+    @Column(name = "pc_id")
     private Long id;
 
     /**
      * 项目编号
      */
-    @Column(name="pro_id")
+    @Column(name = "pc_pro_id")
     private Long proId;
 
+    /**
+     * 项目
+     */
+    @OneToOne(cascade = CascadeType.REFRESH)
+    @JoinColumn(name = "pc_pro_id", insertable = false, updatable = false)
+    private Project project;
 
     /**
      * 项目结项管理描述
      */
-    @Column(name="conclude_description")
+    @Column(name="pc_description")
     private String description;
 
     /**
      * 项目结项附图
      */
-    @Column(name="conclude_path")
+    @Column(name="pc_path")
     private String path;
 
     /**
      *表单提交状态,1为已提交过
      */
-    @Column(name="status")
+    @Column(name="pc_status")
     private Integer status;
 
     /**
      * 提交时间
      */
-    @Column(name="submittime")
+    @Column(name="pc_submit_time")
     private Date submitTime;
 
     public Long getId() {
@@ -94,4 +100,12 @@ public class ProjectConclude {
     public void setSubmitTime(Date submitTime) {
         submitTime = submitTime;
     }
+
+    public Project getProject() {
+        return project;
+    }
+
+    public void setProject(Project project) {
+        this.project = project;
+    }
 }

+ 0 - 92
donate-console/src/main/java/com/uas/console/donate/model/ProjectEvolve.java

@@ -1,92 +0,0 @@
-package com.uas.console.donate.model;
-
-import javax.persistence.*;
-import java.io.Serializable;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-/**
- * 项目进度
- *
- */
-@Entity
-@Table(name = "donate$projectevolve")
-public class ProjectEvolve implements Serializable{
-    private static final long serialVersionUID = 1L;
-    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-
-    /**
-     * 编号
-     */
-    @Id
-    @GeneratedValue(strategy= GenerationType.IDENTITY)
-    @Column(name = "id")
-    private Long id;
-
-    /**
-     * 项目编号
-     */
-    @Column(name="pro_id")
-    private Long proId;
-
-
-    /**
-     * 项目报告描述
-     */
-    @Column(name="evolve_description")
-    private String description;
-
-    /**
-     *表单提交状态
-     */
-    @Column(name="status")
-    private Integer status;
-
-    /**
-     * 提交时间
-     */
-    @Column(name="submittime")
-    private Date submitTime;
-
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public Long getProId() {
-        return proId;
-    }
-
-    public void setProId(Long proId) {
-        this.proId = proId;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public Integer getStatus() {
-        return status;
-    }
-
-    public void setStatus(Integer status) {
-        this.status = status;
-    }
-
-    public String getSubmitTime() {
-        Date date = this.submitTime;
-        return date != null ? sdf.format(this.submitTime) : null;
-    }
-
-    public void setSubmitTime(Date submitTime) {
-        this.submitTime = submitTime;
-    }
-}

+ 24 - 9
donate-console/src/main/java/com/uas/console/donate/model/ProjectFinance.java

@@ -9,53 +9,60 @@ public class ProjectFinance {
     private static final long serialVersionUID = 1L;
 
     /**
-     * 编号
+     * id
      */
     @Id
     @GeneratedValue(strategy= GenerationType.IDENTITY)
-    @Column(name = "id")
+    @Column(name = "pf_id")
     private Long id;
 
     /**
      * 项目编号
      */
-    @Column(name="pro_id")
+    @Column(name = "pf_pro_id")
     private Long proId;
 
+    /**
+     * 关联项目
+     */
+    @ManyToOne(cascade = CascadeType.REFRESH)
+    @JoinColumn(name = "pf_pro_id", insertable = false, updatable = false)
+    private Project project;
+
     /**
      * 支出类型,1:项目支出  2:执行成本
      */
-    @Column(name = "type")
+    @Column(name = "pf_type")
     private Integer type;
 
     /**
      * 支出金额
      */
-    @Column(name = "amount")
+    @Column(name = "pf_amount")
     private Long amount;
 
     /**
      * 发票图片
      */
-    @Column(name = "receipt")
+    @Column(name = "pf_receipt")
     private String path;
 
     /**
      * 项目报告描述
      */
-    @Column(name="finance_description")
+    @Column(name="pf_description")
     private String description;
 
     /**
      *表单提交状态
      */
-    @Column(name="status")
+    @Column(name="pf_status")
     private Integer status;
 
     /**
      * 提交时间
      */
-    @Column(name="submittime")
+    @Column(name="pf_submit_time")
     private Date submitTime;
 
 
@@ -122,4 +129,12 @@ public class ProjectFinance {
     public void setSubmitTime(Date submitTime) {
         this.submitTime = submitTime;
     }
+
+    public Project getProject() {
+        return project;
+    }
+
+    public void setProject(Project project) {
+        this.project = project;
+    }
 }

+ 22 - 9
donate-console/src/main/java/com/uas/console/donate/model/ProjectReport.java

@@ -11,43 +11,48 @@ public class ProjectReport {
     private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 
     /**
-     * 编号
+     * id
      */
     @Id
     @GeneratedValue(strategy= GenerationType.IDENTITY)
-    @Column(name = "id")
+    @Column(name = "pr_id")
     private Long id;
 
     /**
      * 项目编号
      */
-    @Column(name="pro_id")
+    @Column(name="pr_pro_id")
     private Long proId;
 
+    /**
+     * 关联项目
+     */
+    @ManyToOne(cascade = CascadeType.REFRESH)
+    @JoinColumn(name = "pr_pro_id", insertable = false, updatable = false)
+    private Project project;
+
     /**
      *图片URL
      */
-    @Column(name="report_img_path")
+    @Column(name="pr_img_path")
     private String path;
 
-
     /**
      * 项目报告描述
      */
-    @Column(name="report_description")
+    @Column(name="pr_description")
     private String description;
 
     /**
      *表单提交状态
      */
-    @Column(name="status")
+    @Column(name="pr_status")
     private Integer status;
 
-
     /**
      * 提交时间
      */
-    @Column(name="submittime")
+    @Column(name="pr_submit_time")
     private Date submitTime;
 
     public Long getId() {
@@ -98,4 +103,12 @@ public class ProjectReport {
     public void setPath(String path) {
         this.path = path;
     }
+
+    public Project getProject() {
+        return project;
+    }
+
+    public void setProject(Project project) {
+        this.project = project;
+    }
 }

+ 49 - 5
donate-console/src/main/java/com/uas/console/donate/model/UsageBufferedLogger.java

@@ -26,13 +26,25 @@ public class UsageBufferedLogger extends BufferedLogger<UsageLog> {
 	 *            消息标题
 	 * @param message
 	 *            消息
-	 * @param userUU
-	 *  		  用户uu
 	 */
 	public void log(String title, String message) {
 		log(new UsageLog(title, message, null, null));
 	}
 
+	/**
+	 * 记录使用日志
+	 *
+	 * @param title
+	 *            消息标题
+	 * @param message
+	 *            消息
+	 * @param userUU
+	 *  		  用户uu
+	 */
+	public void log(String title, String message, Long userUU) {
+		log(new UsageLog(title, message, userUU));
+	}
+
 	/**
 	 * 记录使用日志
 	 *
@@ -42,13 +54,27 @@ public class UsageBufferedLogger extends BufferedLogger<UsageLog> {
 	 *            消息
 	 * @param description
 	 *            消息详细描述
-	 * @param userUU
-	 * 			  用户uu
 	 */
 	public void log(String title, String message, String description) {
 		log(new UsageLog(title, message, description, null, null));
 	}
 
+	/**
+	 * 记录使用日志
+	 *
+	 * @param title
+	 *            消息标题
+	 * @param message
+	 *            消息
+	 * @param description
+	 *            消息详细描述
+	 * @param userUU
+	 * 			  用户uu
+	 */
+	public void log(String title, String message, String description, Long userUU) {
+		log(new UsageLog(title, message, description, null, null, userUU));
+	}
+
 	/**
 	 * 记录具体单据操作日志
 	 *
@@ -64,8 +90,26 @@ public class UsageBufferedLogger extends BufferedLogger<UsageLog> {
 	 *            相关单据主键
 	 */
 	public void log(String title, String message, String description,
-			String relativeCode, Long relativeKey) {
+					String relativeCode, Long relativeKey) {
 		log(new UsageLog(title, message, description, relativeCode, relativeKey));
 	}
 
+	/**
+	 * 记录具体单据操作日志
+	 *
+	 * @param title
+	 *            消息标题
+	 * @param message
+	 *            消息
+	 * @param description
+	 *            消息详细描述
+	 * @param relativeCode
+	 *            相关单据号
+	 * @param relativeKey
+	 *            相关单据主键
+	 */
+	public void log(String title, String message, String description,
+					String relativeCode, Long relativeKey, Long userUU) {
+		log(new UsageLog(title, message, description, relativeCode, relativeKey, userUU));
+	}
 }

+ 20 - 3
donate-console/src/main/java/com/uas/console/donate/model/UsageLog.java

@@ -2,8 +2,8 @@ package com.uas.console.donate.model;
 
 import com.alibaba.fastjson.annotation.JSONField;
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.uas.console.donate.core.support.SystemSession;
 import com.uas.platform.core.logging.BufferedLogable;
-import com.uas.service.donate.core.support.SystemSession;
 import org.springframework.util.StringUtils;
 
 import javax.persistence.*;
@@ -156,6 +156,22 @@ public class UsageLog extends BufferedLogable {
 
 	}
 
+	public UsageLog(String title, String message, Long userUU) {
+		this.title = title;
+		this.message = message;
+		this.time = new Date();
+		this.userUU = userUU;
+	}
+
+	public UsageLog(String title, String message, String code, Long key) {
+		this.title = title;
+		this.message = message;
+		this.code = code;
+		this.key = key;
+		this.time = new Date();
+		this.userUU = null != SystemSession.getUser() ? SystemSession.getUser().getUserUU() : null;
+	}
+
 	public UsageLog(String title, String message, String detail, String code, Long key) {
 		this.title = title;
 		this.message = message;
@@ -166,13 +182,14 @@ public class UsageLog extends BufferedLogable {
 		this.userUU = null != SystemSession.getUser() ? SystemSession.getUser().getUserUU() : null;
 	}
 
-	public UsageLog(String title, String message, String code, Long key) {
+	public UsageLog(String title, String message, String detail, String code, Long key, Long userUU) {
 		this.title = title;
 		this.message = message;
+		this.detail = detail;
 		this.code = code;
 		this.key = key;
 		this.time = new Date();
-		this.userUU = null != SystemSession.getUser() ? SystemSession.getUser().getUserUU() : null;
+		this.userUU = userUU;
 	}
 
 	public void bufferedLog(String bufferedMessage) {

+ 7 - 0
donate-console/src/main/java/com/uas/console/donate/service/MessageService.java

@@ -1,6 +1,7 @@
 package com.uas.console.donate.service;
 
 import com.uas.console.donate.model.Message;
+import com.uas.console.donate.model.MessageDetail;
 import com.uas.console.donate.model.SearchFilter;
 import com.uas.platform.core.model.PageInfo;
 import org.springframework.data.domain.Page;
@@ -47,4 +48,10 @@ public interface MessageService {
      * @return response
      */
     ResponseEntity<String> sendMessage(String receiverTel, List<Object> obj, String msgId);
+
+    /**
+     * 推送消息到app
+     * @param saveDetails 消息内容
+     */
+    void pushReleases(List<MessageDetail> saveDetails);
 }

+ 0 - 15
donate-console/src/main/java/com/uas/console/donate/service/ProjectEvolveService.java

@@ -1,15 +0,0 @@
-package com.uas.console.donate.service;
-
-import com.uas.console.donate.model.ProjectEvolve;
-
-import java.util.List;
-
-public interface ProjectEvolveService {
-
-    ProjectEvolve save(ProjectEvolve projectEvolve);
-
-    //删除某一条进度
-    ProjectEvolve deleteById(Long id);
-
-    List<ProjectEvolve> findByProId(Long proId);
-}

+ 0 - 3
donate-console/src/main/java/com/uas/console/donate/service/impl/ActivityRecodeServiceImpl.java

@@ -18,9 +18,6 @@ public class ActivityRecodeServiceImpl implements ActivityRecodeService {
     @Autowired
     private ActivityService activityService;
 
-    @Autowired
-    private AwardService awardService;
-
     @Autowired
     private ActivityRecodeService activityRecodeService;
 

+ 11 - 2
donate-console/src/main/java/com/uas/console/donate/service/impl/ActivityServiceImpl.java

@@ -3,11 +3,14 @@ package com.uas.console.donate.service.impl;
 import com.uas.console.donate.MessageConfiguration;
 import com.uas.console.donate.core.support.SystemSession;
 import com.uas.console.donate.dao.*;
+import com.uas.console.donate.event.ActivityPublishEvent;
+import com.uas.console.donate.event.GetPrizePublishEvent;
 import com.uas.console.donate.model.*;
 import com.uas.console.donate.service.ActivityService;
 import com.uas.console.donate.service.AttachService;
 import com.uas.console.donate.service.MessageService;
 import com.uas.console.donate.util.CollectionUtils;
+import com.uas.console.donate.util.ContextUtils;
 import com.uas.dfs.service.FileClient;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
@@ -16,6 +19,7 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.ui.ModelMap;
 import org.springframework.util.StringUtils;
 import org.springframework.web.multipart.MultipartFile;
@@ -95,7 +99,9 @@ public class ActivityServiceImpl implements ActivityService{
     public Activity submit(Activity activity){
         //设置成发布状态
         activity.setPublish(2);
-        return submitOrSave(activity);
+        Activity act = submitOrSave(activity);
+        ContextUtils.publishEvent(new ActivityPublishEvent(Collections.singletonList(act)));
+        return act;
     }
 
     private Activity submitOrSave(Activity activity) {
@@ -236,6 +242,7 @@ public class ActivityServiceImpl implements ActivityService{
         return map;
     }
 
+    @Transactional
     @Override
     public ModelMap openAward(Long activityId) {
         ModelMap map = new ModelMap();
@@ -295,7 +302,9 @@ public class ActivityServiceImpl implements ActivityService{
                 awardPersonNums = awardPersonNums + list;
             }
         }
-        activityRecodeDao.save(activityRecodes);
+        activityRecodes = activityRecodeDao.save(activityRecodes);
+        // 产生消息
+        ContextUtils.publishEvent(new GetPrizePublishEvent(activityRecodes));
         activity.setReceivePerson(awardPersonNums);
         activity.setLuckyTime(new Date());
         //计算出这个活动的中奖率,中奖数除以总人数

+ 60 - 5
donate-console/src/main/java/com/uas/console/donate/service/impl/MessageServiceImpl.java

@@ -3,11 +3,11 @@ package com.uas.console.donate.service.impl;
 import com.uas.console.donate.MessageConfiguration;
 import com.uas.console.donate.dao.MessageDao;
 import com.uas.console.donate.dao.MessageDetailDao;
-import com.uas.console.donate.model.Message;
-import com.uas.console.donate.model.SearchFilter;
-import com.uas.console.donate.model.SmsMessage;
+import com.uas.console.donate.model.*;
 import com.uas.console.donate.service.MessageService;
 import com.uas.message.mail.service.MailService;
+import com.uas.platform.core.logging.BufferedLoggerManager;
+import com.uas.platform.core.model.Constant;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.platform.core.util.HttpUtil;
@@ -18,14 +18,14 @@ import org.springframework.data.jpa.domain.Specification;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
 import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * Created by dongbw
@@ -46,6 +46,10 @@ public class MessageServiceImpl implements MessageService {
     @Autowired
     private MessageConfiguration messageConfiguration;
 
+    private static final UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
+
+    private final static String PROD_URL = "http://113.105.74.140:8092/tigase/baiduPush";
+
     /**
      * 获取所有消息
      *
@@ -141,4 +145,55 @@ public class MessageServiceImpl implements MessageService {
             return new ResponseEntity<String>(HttpStatus.INTERNAL_SERVER_ERROR);
         }
     }
+
+    @Override
+    public void pushReleases(List<MessageDetail> saveDetails) {
+        List<Long> detailIds = new ArrayList<>();
+        Set<Long> userUUs = new HashSet<>();
+        for (MessageDetail messageDetail : saveDetails) {
+            // 推送消息同一个人只推一次
+            if (messageDetail.getReceiveUserUU() != null && !userUUs.contains(messageDetail.getReceiveUserUU())) {
+                Map<String, Object> params = new HashMap<>();
+                User receiver = messageDetail.getReceiveUser();
+                // 如果imId为空,先去账户中心获取
+                //TODO 账户中心还未部署,部署之后打开注释
+//                if (null == receiver.getUserIMId()) {
+//                    Long imId = AccountUtils.getImIdByUserUU(messageDetail.getReceiveUserUU());
+//                    User user = userDao.findOne(receiver.getUserUU());
+//                    user.setUserIMId(imId);
+//                    receiver = userDao.save(user);
+//                }
+                // 防止获取失败,再判断一次
+                if (null != receiver.getUserIMId()) {
+                    params.put("master", messageDetail.getMessage().getUser().getOrg().getName());//账套 公司名称
+                    params.put("userid", String.valueOf(receiver.getUserIMId()));//推送目标用户
+                    params.put("title", messageDetail.getMessage().getTitle());//推送标题
+                    params.put("content", messageDetail.getMessage().getContext());//正文
+//                        params.put("enUU", String.valueOf(releaseDetail.getVendUU()));//UU号
+                    params.put("url", "");//跳转链接地址
+                    params.put("pageTitle", messageDetail.getMessage().getTitle());//页面标题
+                    params.put("platform", "donate");//系统名称,ERP或
+                    try {
+                        com.uas.sso.common.util.HttpUtil.ResponseWrap res = com.uas.sso.common.util.HttpUtil.doPost(PROD_URL, params);
+                        if (!res.isSuccess()) {
+                            logger.log("推送消息", "推送消息失败,目标用户UU:" + messageDetail.getReceiveUserUU(), res.getContent(), messageDetail.getMessage().getUserUU());
+                            throw new Exception(res.getContent());
+                        } else {
+                            logger.log("推送消息", "推送消息成功,目标用户UU:" + messageDetail.getReceiveUserUU(), messageDetail.getMessage().getTitle(), messageDetail.getMessage().getUserUU());
+                            userUUs.add(messageDetail.getReceiveUserUU());
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+            if (null != messageDetail.getId()) {
+                messageDetail.setPushStatus(Constant.YES);
+                detailIds.add(messageDetail.getId());
+            }
+        }
+        if (!CollectionUtils.isEmpty(detailIds)) {
+            messageDetailDao.setPushedByIds(detailIds.toArray());
+        }
+    }
 }

+ 0 - 30
donate-console/src/main/java/com/uas/console/donate/service/impl/ProjectEvolveServiceImpl.java

@@ -1,30 +0,0 @@
-package com.uas.console.donate.service.impl;
-
-import com.uas.console.donate.dao.ProjectEvolveDao;
-import com.uas.console.donate.model.ProjectEvolve;
-import com.uas.console.donate.service.ProjectEvolveService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-@Service
-public class ProjectEvolveServiceImpl implements ProjectEvolveService{
-    @Autowired
-    private ProjectEvolveDao projectEvolveDao;
-
-    @Override
-    public ProjectEvolve save(ProjectEvolve projectEvolve) {
-        return projectEvolveDao.save(projectEvolve);
-    }
-
-    //删除某一条进度
-    public ProjectEvolve deleteById(Long id){
-        return projectEvolveDao.deleteById(id);
-    }
-
-    @Override
-    public List<ProjectEvolve> findByProId(Long proId) {
-        return projectEvolveDao.findByProId(proId);
-    }
-}

+ 33 - 5
donate-console/src/main/java/com/uas/console/donate/service/impl/ProjectServiceImpl.java

@@ -3,10 +3,14 @@ package com.uas.console.donate.service.impl;
 
 import com.uas.console.donate.core.support.SystemSession;
 import com.uas.console.donate.dao.*;
+import com.uas.console.donate.event.ProjectConcludePublishEvent;
+import com.uas.console.donate.event.ProjectFinancePublishEvent;
+import com.uas.console.donate.event.ProjectPublishEvent;
+import com.uas.console.donate.event.ProjectReportPublishEvent;
 import com.uas.console.donate.model.*;
 import com.uas.console.donate.service.ProjectService;
+import com.uas.console.donate.util.ContextUtils;
 import com.uas.platform.core.model.PageInfo;
-import com.uas.platform.core.persistence.UserUU;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
@@ -21,6 +25,9 @@ import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 
@@ -45,6 +52,8 @@ public class ProjectServiceImpl implements ProjectService {
     @Autowired
     private UserDao userDao;
 
+    private static final SimpleDateFormat codesdf=new SimpleDateFormat("yyyyMMddhhmmsssss");
+
     //项目发起,有草稿则取出草稿
     @Override
     public Project show(){
@@ -79,6 +88,15 @@ public class ProjectServiceImpl implements ProjectService {
     //提交项目
     @Override
     public Project submit(Project project) {
+        Date date=new Date();
+        //设置项目提交时间
+        project.setSubmitTime(date);
+        //设置项目编号
+        project.setCode(codesdf.format(date));
+        //设置项目默认参与人数
+        project.setJoinAmount(0L);
+        //设置默认项目已筹集总金额
+        project.setTotalAmount(0.00);
         if (null != SystemSession.getUser().getUserUU()) {
             User user = userDao.findOne(SystemSession.getUser().getUserUU());
             if (null == user.getOrg()) {
@@ -93,7 +111,11 @@ public class ProjectServiceImpl implements ProjectService {
 
             project.setEnd((short) 0);
 
-            return projectDao.save(project);
+            Project pro =  projectDao.save(project);
+            List<Project> projects = new ArrayList<>();
+            projects.add(pro);
+            ContextUtils.publishEvent(new ProjectPublishEvent(projects));
+            return pro;
         }
         return null;
     }
@@ -250,7 +272,9 @@ public class ProjectServiceImpl implements ProjectService {
             Project project = projectDao.findOne(proId);
             project.setTotalCost((null != project.getTotalCost() ? project.getTotalCost() : 0) + finance.getAmount());
             projectDao.save(project);
-            projectFinanceDao.save(finance);
+            finance = projectFinanceDao.save(finance);
+            // 产生消息
+            ContextUtils.publishEvent(new ProjectFinancePublishEvent(Collections.singletonList(finance)));
             map.put("success", true);
         } catch (Exception e) {
             e.printStackTrace();
@@ -270,7 +294,9 @@ public class ProjectServiceImpl implements ProjectService {
             Project project = projectDao.findOne(proId);
             project.setModifyTime(date);
             projectDao.save(project);
-            projectReportDao.save(report);
+            report = projectReportDao.save(report);
+            // 产生消息
+            ContextUtils.publishEvent(new ProjectReportPublishEvent(Collections.singletonList(report)));
             map.put("success", true);
         } catch (Exception e) {
             e.printStackTrace();
@@ -297,7 +323,9 @@ public class ProjectServiceImpl implements ProjectService {
             Project project = projectDao.findOne(proId);
             project.setModifyTime(date);
             projectDao.save(project);
-            projectConcludeDao.save(conclude);
+            conclude = projectConcludeDao.save(conclude);
+            // 产生消息
+            ContextUtils.publishEvent(new ProjectConcludePublishEvent(Collections.singletonList(conclude)));
             map.put("success", true);
         } catch (Exception e) {
             e.printStackTrace();

+ 2 - 3
donate-service/src/main/java/com/uas/service/donate/SSOConfiguration.java

@@ -39,9 +39,8 @@ public class SSOConfiguration extends WebMvcConfigurerAdapter {
          */
         registry.addInterceptor(ssoInterceptor).addPathPatterns("/**").
                 excludePathPatterns("/WEB-INF/**", "/**/static/**", "/sso/login/**", "/sso/logout/**", "/sso/register/**",
-                        "/", "/project/**", "/activity/**", "/carousels/**", "/message/**",
-                        "/org/**", "/projectconclude/**", "/projectevolve/**", "/projectfinance/**",
-                        "/projectrecode/**", "/wxpay/**", "/alipay/**", "/mobile/**", "/index", "/activeCenter",
+                        "/", "/project/**", "/activity/**", "/carousels/**", "/message/**", "/org/**", "/projectconclude/**",
+                        "/projectfinance/**", "/projectrecode/**", "/wxpay/**", "/alipay/**", "/mobile/**", "/index", "/activeCenter",
                         "/app/**", "/userAgreement", "/user/**", "/public/**");
         registry.addInterceptor(accessInterceptor).addPathPatterns("/**");
     }

+ 5 - 0
donate-service/src/main/java/com/uas/service/donate/controller/AlipayController.java

@@ -20,8 +20,10 @@ import com.uas.service.donate.api.AlipayApi;
 import com.uas.service.donate.config.AlipayConfig;
 import com.uas.service.donate.core.support.SystemSession;
 import com.uas.service.donate.dao.UserDao;
+import com.uas.service.donate.event.ProjectJoinedPublishEvent;
 import com.uas.service.donate.model.*;
 import com.uas.service.donate.service.*;
+import com.uas.service.donate.util.ContextUtils;
 import com.uas.service.donate.util.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -39,6 +41,7 @@ import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import java.net.URLEncoder;
+import java.util.Collections;
 import java.util.Date;
 import java.util.Map;
 
@@ -342,6 +345,8 @@ public class AlipayController {
                                         //交易支付成功 注:付款完成后,支付宝系统发送该交易状态通知
                                         projectRecode.setStatus((short) 2);
                                         projectRecodeService.update(projectRecode);
+                                        // 产生消息
+                                        ContextUtils.publishEvent(new ProjectJoinedPublishEvent(Collections.singletonList(projectRecode)));
                                         saveAlipayOrder(data, null);
                                         logger.info("异步通知支付成功处理结束:商户订单状态:" + projectRecode.getStatus());
                                     }

+ 7 - 7
donate-service/src/main/java/com/uas/service/donate/controller/ProjectEvolveController.java → donate-service/src/main/java/com/uas/service/donate/controller/ProjectReportController.java

@@ -1,9 +1,9 @@
 package com.uas.service.donate.controller;
 
 import com.uas.platform.core.logging.BufferedLoggerManager;
-import com.uas.service.donate.model.ProjectEvolve;
+import com.uas.service.donate.model.ProjectReport;
 import com.uas.service.donate.model.UsageBufferedLogger;
-import com.uas.service.donate.service.ProjectEvolveService;
+import com.uas.service.donate.service.ProjectReportService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -18,11 +18,11 @@ import java.util.List;
  * dongbw 2018年1月3日 23:42:59
  */
 @Controller
-@RequestMapping("/projectevolve")
-public class ProjectEvolveController {
+@RequestMapping("/projectreport")
+public class ProjectReportController {
 
     @Autowired
-    private ProjectEvolveService projectEvolveService;
+    private ProjectReportService projectReportService;
 
     private static final UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
 
@@ -32,9 +32,9 @@ public class ProjectEvolveController {
      */
     @ResponseBody
     @RequestMapping( value = "/getEvolves/{proId}",method = RequestMethod.GET)
-    public List<ProjectEvolve> findAll(@PathVariable("proId") Long proId){
+    public List<ProjectReport> findAll(@PathVariable("proId") Long proId){
         logger.log("项目进度", "查找某项目所有的项目进度", null, null, proId);
-        return projectEvolveService.findAll(proId);
+        return projectReportService.findAll(proId);
     }
 
 }

+ 4 - 1
donate-service/src/main/java/com/uas/service/donate/controller/WxpayController.java

@@ -16,6 +16,7 @@ import com.uas.service.donate.api.WxPayApi;
 import com.uas.service.donate.config.WxConfig;
 import com.uas.service.donate.core.support.SystemSession;
 import com.uas.service.donate.dao.UserDao;
+import com.uas.service.donate.event.ProjectJoinedPublishEvent;
 import com.uas.service.donate.model.Project;
 import com.uas.service.donate.model.ProjectRecode;
 import com.uas.service.donate.model.User;
@@ -41,6 +42,7 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.net.URLEncoder;
+import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
@@ -496,7 +498,8 @@ public class WxpayController {
                         }
                         //更新订单状态
                         projectRecodeService.update(projectRecode);
-
+                        // 产生消息
+                        ContextUtils.publishEvent(new ProjectJoinedPublishEvent(Collections.singletonList(projectRecode)));
 
                     }
                     //String totalFee = WxPayBaseResult.feeToYuan(result.getTotalFee());

+ 29 - 0
donate-service/src/main/java/com/uas/service/donate/dao/MessageDetailDao.java

@@ -3,6 +3,10 @@ package com.uas.service.donate.dao;
 import com.uas.service.donate.model.MessageDetail;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
@@ -19,4 +23,29 @@ public interface MessageDetailDao extends JpaRepository<MessageDetail, Long>, Jp
      * @return 消息list
      */
     List<MessageDetail> findByReceiveUserUUAndReadStatus(Long userUU, Short readStatus);
+
+    /**
+     * 根据userUU查找消息
+     * @param userUU 用户UU
+     * @return 消息list
+     */
+    List<MessageDetail> findByReceiveUserUU(Long userUU);
+
+    /**
+     * 根据接收对象查找消息
+     * @param receiver 接收对象
+     * @return 消息list
+     */
+    @Query("select d from MessageDetail d where d.message.receiver = :receiver")
+    List<MessageDetail> findByReceiver(@Param("receiver")String receiver);
+
+    /**
+     * 将消息设置成已推送
+     *
+     * @param ids messageDetail id
+     */
+    @Modifying
+    @Transactional
+    @Query("update MessageDetail o set o.pushStatus = 1 where o.id in :ids")
+    void setPushedByIds(@Param("ids") Object[] ids);
 }

+ 0 - 17
donate-service/src/main/java/com/uas/service/donate/dao/ProjectEvolveDao.java

@@ -1,17 +0,0 @@
-package com.uas.service.donate.dao;
-
-import com.uas.service.donate.model.ProjectEvolve;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
-
-import java.util.List;
-
-public interface ProjectEvolveDao extends JpaRepository<ProjectEvolve,Long>,JpaSpecificationExecutor<ProjectEvolve> {
-
-    //查找某项目所有的项目进度
-    @Query("from ProjectEvolve where proId=:proId")
-    List<ProjectEvolve> findAll(@Param("proId")Long proId);
-}

+ 4 - 0
donate-service/src/main/java/com/uas/service/donate/dao/ProjectRecodeDao.java

@@ -41,4 +41,8 @@ public interface ProjectRecodeDao extends JpaRepository<ProjectRecode,Long>,JpaS
     Double sumamount(@Param("proId")Long proId);
 
     List<ProjectRecode> findByProId(Long proId);
+
+    //查询某项目的捐款明细
+    @Query("from ProjectRecode where proId=:proId")
+    List<ProjectRecode> findProjectDetail(@Param("proId")Long proId);
 }

+ 3 - 0
donate-service/src/main/java/com/uas/service/donate/dao/ProjectReportDao.java

@@ -5,7 +5,10 @@ import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 @Repository
 public interface ProjectReportDao extends JpaRepository<ProjectReport,Long>,JpaSpecificationExecutor<ProjectReport>{
 
+    List<ProjectReport> findByProId(Long proId);
 }

+ 57 - 0
donate-service/src/main/java/com/uas/service/donate/event/ActivityJoinedPublishEvent.java

@@ -0,0 +1,57 @@
+package com.uas.service.donate.event;
+
+
+import com.uas.service.donate.model.Activity;
+import com.uas.service.donate.model.ActivityRecode;
+import com.uas.service.donate.model.Message;
+import com.uas.service.donate.model.MessageDetail;
+
+import java.util.List;
+
+/**
+ * 参加活动事件
+ * Created by dongbw
+ * 2018年1月8日
+ */
+public class ActivityJoinedPublishEvent extends PublishEvent<MessageDetail, ActivityRecode> {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public ActivityJoinedPublishEvent(List<ActivityRecode> savedList) {
+        super(savedList);
+    }
+
+    /**
+     * 生成对应消息记录
+     *
+     * @param recode 活动参与记录
+     * @return 消息
+     */
+    @Override
+	public MessageDetail release(ActivityRecode recode) {
+        Activity activity = recode.getActivity();
+        // 发起人UU
+        Long userUU = activity.getUserUU();
+        // 类型
+        String type = "活动消息";
+        // 来源表
+        String table = "donate$activityrecode";
+        // 来源id
+        Long sourceId = recode.getId();
+        // url
+        String url = "/activity#/detail/" + activity.getId();
+        // 标题
+        String title = "参与活动";
+        // 内容
+        String context = "您已成功参与活动:" + activity.getName() + "(" + activity.getCode() + ")!";
+        // 接收对象
+        String receiver = recode.getUser().getName();
+        Message message = new Message(userUU, title, context, type, table, sourceId, url, receiver);
+        MessageDetail messageDetail = new MessageDetail(recode.getUuid());
+        messageDetail.setMessage(message);
+        return messageDetail;
+    }
+}

+ 54 - 0
donate-service/src/main/java/com/uas/service/donate/event/ProjectJoinedPublishEvent.java

@@ -0,0 +1,54 @@
+package com.uas.service.donate.event;
+
+
+import com.uas.service.donate.model.*;
+
+import java.util.List;
+
+/**
+ * 项目参与成功事件
+ * Created by dongbw
+ * 2018年1月8日
+ */
+public class ProjectJoinedPublishEvent extends PublishEvent<MessageDetail, ProjectRecode> {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public ProjectJoinedPublishEvent(List<ProjectRecode> savedList) {
+        super(savedList);
+    }
+
+    /**
+     * 生成对应消息记录
+     *
+     * @param recode 项目参与记录
+     * @return 消息
+     */
+    @Override
+	public MessageDetail release(ProjectRecode recode) {
+        Project project = recode.getProject();
+        // 发起人UU
+        Long userUU = project.getUserUU();
+        // 类型
+        String type = "项目消息";
+        // 来源表
+        String table = "donate$projectrecode";
+        // 来源id
+        Long sourceId = recode.getId();
+        // url
+        String url = "/project#/detail/" + project.getId();
+        // 标题
+        String title = "捐款成功";
+        // 内容
+        String context = "参与项目:" + project.getName() + "(" + project.getCode() + ")成功,感谢您的爱心!";
+        // 接收对象
+        String receiver = recode.getUser().getName();
+        Message message = new Message(userUU, title, context, type, table, sourceId, url, receiver);
+        MessageDetail messageDetail = new MessageDetail(recode.getUuid());
+        messageDetail.setMessage(message);
+        return messageDetail;
+    }
+}

+ 0 - 67
donate-service/src/main/java/com/uas/service/donate/event/ProjectPublishEvent.java

@@ -1,67 +0,0 @@
-package com.uas.service.donate.event;
-
-import com.uas.service.donate.model.MessageDetail;
-import com.uas.service.donate.model.Project;
-
-import java.util.List;
-
-/**
- * 发布项目时时生成消息事件
- * Created by dongbw
- *
- */
-public class ProjectPublishEvent extends PublishEvent<MessageDetail, Project> {
-
-	/**
-	 *
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public ProjectPublishEvent(List<Project> savedList) {
-        super(savedList);
-    }
-
-    /**
-     * 生成对应消息记录
-     *
-     * @param project 项目
-     * @return
-     */
-    @Override
-	public MessageDetail release(Project project) {
-        //TODO 新项目发布时,产生消息
-//        Long emUU = orderAll.getUserUU();
-//        String emName = "操作员";
-//        if (null != orderAll.getUser()) {
-//            emName = orderAll.getUser().getUserName();
-//        }
-//        Long enUU = orderAll.getEnUU();
-//        Date date = new Date();
-//        String codeValue = orderAll.getCode();
-//        String from = "B2B";
-//        if (orderAll.getErpId() != null) { // erp传到平台的单据,包含erpId字段记录来源
-//            from = "ERP";
-//        }
-//        String type = "新增采购订单";
-//        String title = "B2B商务提醒";
-//        Short toVendor = Constant.YES;
-//        Short isReply = Constant.NO;
-//        String category = "sale";  // 对接收方来说,该单据类型
-//        String table = "purc$orders";
-//        Long sourceId = orderAll.getId();
-//        String url = "#/sale/order/" + orderAll.getId();
-//        Short orderStatus = orderAll.getStatus();
-//        String context = orderAll.getEnterprise().getEnName() + "的" + emName + "给您发送了一张新的采购单(" + codeValue + ")!";
-//        PagingRelease release = new PagingRelease(emUU, emName, enUU, date, codeValue, from, title, context, type, isReply, category, table, sourceId, orderStatus, toVendor, url);
-//        Long vendUU = orderAll.getVendUU();
-//        Long vendUserUU = orderAll.getVendUserUU();
-//        if (null == vendUserUU) {
-//            vendUserUU = 1L;
-//        }
-//        String vendUserName = orderAll.getVenduser();
-//        PagingReleaseDetail releaseDetail = new PagingReleaseDetail(vendUU, vendUserUU, vendUserName);
-//        releaseDetail.setPagingRelease(release);
-//        return releaseDetail;
-        return null;
-    }
-}

+ 57 - 0
donate-service/src/main/java/com/uas/service/donate/event/TakePrizePublishEvent.java

@@ -0,0 +1,57 @@
+package com.uas.service.donate.event;
+
+
+import com.uas.service.donate.model.Activity;
+import com.uas.service.donate.model.ActivityRecode;
+import com.uas.service.donate.model.Message;
+import com.uas.service.donate.model.MessageDetail;
+
+import java.util.List;
+
+/**
+ * 领奖消息事件
+ * Created by dongbw
+ * 2018年1月8日
+ */
+public class TakePrizePublishEvent extends PublishEvent<MessageDetail, ActivityRecode> {
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 1L;
+
+	public TakePrizePublishEvent(List<ActivityRecode> savedList) {
+        super(savedList);
+    }
+
+    /**
+     * 生成对应消息记录
+     *
+     * @param recode 活动参与记录
+     * @return 消息
+     */
+    @Override
+	public MessageDetail release(ActivityRecode recode) {
+        Activity activity = recode.getActivity();
+        // 发起人UU
+        Long userUU = activity.getUserUU();
+        // 类型
+        String type = "活动消息";
+        // 来源表
+        String table = "donate$activityrecode";
+        // 来源id
+        Long sourceId = recode.getId();
+        // url
+        String url = "/activity#/detail/" + activity.getId();
+        // 标题
+        String title = "活动领奖";
+        // 内容
+        String context = "您已在中奖的活动:" + activity.getName() + "(" + activity.getCode() + ")中成功领奖!";
+        // 接收对象
+        String receiver = recode.getUser().getName();
+        Message message = new Message(userUU, title, context, type, table, sourceId, url, receiver);
+        MessageDetail messageDetail = new MessageDetail(recode.getUuid());
+        messageDetail.setMessage(message);
+        return messageDetail;
+    }
+}

+ 175 - 7
donate-service/src/main/java/com/uas/service/donate/listener/PublishListener.java

@@ -1,31 +1,199 @@
 package com.uas.service.donate.listener;
 
-import com.uas.service.donate.event.ProjectPublishEvent;
+import com.uas.platform.core.logging.BufferedLoggerManager;
+import com.uas.service.donate.dao.*;
 import com.uas.service.donate.event.PublishEvent;
-import com.uas.service.donate.model.MessageDetail;
+import com.uas.service.donate.model.*;
+import com.uas.service.donate.service.MessageService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationListener;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
 
+import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 /**
  * 监听发布事件<br>
  * 产生消息
- * 
+ * @author dongbw 2018年1月4日 14:02:49
  */
 @Component
 public class PublishListener implements ApplicationListener<PublishEvent<?, ?>> {
 
+	@Autowired
+	private MessageDetailDao messageDetailDao;
 
+	@Autowired
+	private MessageDao messageDao;
+
+	@Autowired
+	private UserDao userDao;
+
+	@Autowired
+	private MessageService messageService;
+
+	@Autowired
+	private ProjectReportDao projectReportDao;
+
+	@Autowired
+	private ProjectFinanceDao projectFinanceDao;
+
+	@Autowired
+	private ProjectConcludeDao projectConcludeDao;
+
+	@Autowired
+	private ProjectRecodeDao projectRecodeDao;
+
+	private static final UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
+
+
+	/**
+	 * 监听事件,产生消息
+	 * @param event  事件
+	 */
 	@SuppressWarnings("unchecked")
 	@Async
 	@Override
 	public void onApplicationEvent(final PublishEvent<?, ?> event) {
-		 if (event instanceof ProjectPublishEvent) {
-		 	// TODO 事件触发监听器产生消息
-			 List<MessageDetail> messageDetailList = ((ProjectPublishEvent) event).release();
-		 }
+		List<MessageDetail> messageDetailList = (List<MessageDetail>) event.release();
+		// TODO 事件触发监听器产生消息
+		// 目前消息都是发给单人的,不用判断
+		PublishOneUser(messageDetailList);
+
+	}
+
+	/**
+	 * 对所有用户发送消息
+	 * @param messageDetailList 消息list
+	 */
+	private void PublishAllUsersReceived (List<MessageDetail> messageDetailList) {
+		List<MessageDetail> saveDetails = new ArrayList<>();
+		for (MessageDetail detail : messageDetailList) {
+			Message message = detail.getMessage();
+			if (null != message.getUserUU()) { // 确保消息有效才继续
+				// 查找所有用户
+				List<User> receiverUsers = userDao.findAll();
+				// 生成消息
+				createMessage(message, receiverUsers, saveDetails);
+			}
+			logger.log("消息提醒", "产生消息提醒", message.getTitle(), null, message.getId());
+		}
+		saveDetails = messageDetailDao.save(saveDetails);
+		// 推送消息到手机APP
+		pushMessageToApp(saveDetails);
+	}
+
+	/**
+	 * 对参与项目的人发送消息
+	 * @param messageDetailList 消息list
+	 */
+	private void PublishProjectRelatedUsers(List<MessageDetail> messageDetailList) {
+		List<MessageDetail> saveDetails = new ArrayList<>();
+		for (MessageDetail detail : messageDetailList) {
+			Message message = detail.getMessage();
+			if (null != message.getTable() && null != message.getSourceId()) { // 确保消息有效才继续
+				// 查找接收消息用户
+				List<User> receiverUsers = getReceivedUsers(message.getTable(), message.getSourceId());
+				// 生成消息
+				createMessage(message, receiverUsers, saveDetails);
+			}
+			logger.log("消息提醒", "产生消息提醒", message.getTitle(), null, message.getId());
+		}
+		saveDetails = messageDetailDao.save(saveDetails);
+		// 推送消息到手机APP
+		pushMessageToApp(saveDetails);
+	}
+
+	/**
+     * 为单个用户产生消息
+	 * @param messageDetailList 消息list
+	 */
+	private void PublishOneUser(List<MessageDetail> messageDetailList) {
+		List<MessageDetail> saveDetails = new ArrayList<>();
+		for (MessageDetail detail : messageDetailList) {
+			Message message = detail.getMessage();
+			saveDetails.add(detail);
+			logger.log("消息提醒", "产生消息提醒", message.getTitle(), null, message.getId(), detail.getReceiveUserUU());
+		}
+		saveDetails = messageDetailDao.save(saveDetails);
+		// 推送消息到手机APP
+		pushMessageToApp(saveDetails);
+	}
+
+	/**
+	 * 根据来源表和来源id获取接收用户
+	 * @param table 来源表
+	 * @param sourceId 来源id
+	 * @return
+	 */
+	private List<User> getReceivedUsers(String table, Long sourceId) {
+		List<User> users = new ArrayList<>();
+		Project project = new Project();
+		// 获取对应项目
+		switch(table) {
+			case "donate$projectreport":
+				ProjectReport report = projectReportDao.findOne(sourceId);
+				project = report.getProject();
+				break;
+			case "donate$projectfinance":
+				ProjectFinance finance = projectFinanceDao.findOne(sourceId);
+				project = finance.getProject();
+				break;
+			case "donate$projectconclude":
+				ProjectConclude conclude = projectConcludeDao.findOne(sourceId);
+				project = conclude.getProject();
+				break;
+
+		}
+		if (null != project.getId()) {
+			List<ProjectRecode> recodes = projectRecodeDao.findProjectDetail(project.getId());
+			for(ProjectRecode recode : recodes) {
+				users.add(recode.getUser());
+			}
+		}
+		return users;
+	}
+
+	/**
+	 * 推送消息到App
+	 * @param saveDetails 详细详情list
+	 */
+	private void pushMessageToApp(List<MessageDetail> saveDetails) {
+		try {
+			// 推送消息
+			messageService.pushReleases(saveDetails);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * 产生消息
+	 * @param message  消息
+	 * @param receiverUsers  接受人UU
+	 * @param saveDetails  保存的消息详情list
+	 */
+	private void createMessage ( Message message, List<User> receiverUsers, List<MessageDetail> saveDetails) {
+		// 用于存储需要接收消息的用户UU
+		Set<Long> userUUs = new HashSet<>();
+		// 设置接收人数
+		message.setReceiverNum(receiverUsers.size());
+		// 为用户新增消息(这里是所有人时,效率非常低,之后需要优化)
+		for (User user : receiverUsers) {
+			try { //去除userUU为空值的情况
+				if (null != user.getUserUU() && !userUUs.contains(user.getUserUU())) {
+					MessageDetail messageDetail = new MessageDetail(user.getUserUU());
+					messageDetail.setMessage(message);
+					saveDetails.add(messageDetail);
+					userUUs.add(user.getUserUU());
+				}
+			} catch (RuntimeException e) {
+				e.getStackTrace();
+			}
+		}
 	}
 
 }

+ 17 - 0
donate-service/src/main/java/com/uas/service/donate/model/Message.java

@@ -115,6 +115,23 @@ public class Message implements Serializable {
     @Column(name = "dm_receivernum")
     private Integer receiverNum;
 
+    public Message() {
+    }
+
+    public Message(Long userUU, String title, String context, String type, String table, Long sourceId, String url, String receiver) {
+        this.userUU = userUU;
+        this.title = title;
+        this.context = context;
+        this.type = type;
+        this.table = table;
+        this.sourceId = sourceId;
+        this.url = url;
+        this.receiver = receiver;
+        this.date = new Date();
+        this.publishDate = new Date();
+        this.readerNum = 0;
+    }
+
     public Long getId() {
         return id;
     }

+ 14 - 0
donate-service/src/main/java/com/uas/service/donate/model/MessageDetail.java

@@ -1,5 +1,7 @@
 package com.uas.service.donate.model;
 
+import com.uas.platform.core.model.Constant;
+
 import javax.persistence.*;
 import java.io.Serializable;
 import java.util.Date;
@@ -75,6 +77,18 @@ public class MessageDetail implements Serializable{
     @JoinColumn(name = "dmd_dmid", nullable = false)
     private Message message;
 
+    public MessageDetail() {
+
+    }
+
+    public MessageDetail(Long userUU) {
+        this.receiveUserUU = userUU;
+        this.readStatus = Constant.NO;
+        this.pushStatus = Constant.NO;
+        this.status = Constant.NO;
+        this.totalStatus = Constant.NO;
+    }
+
     public Long getId() {
         return id;
     }

+ 17 - 4
donate-service/src/main/java/com/uas/service/donate/model/Project.java

@@ -6,7 +6,6 @@ import java.io.Serializable;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
-import java.util.Set;
 
 /**
  * 项目实体
@@ -75,7 +74,7 @@ public class Project implements Serializable{
     private String district;
 
     /**
-     *筹款目标
+     * 筹款目标
      */
     @Column(name = "pro_target")
     private Long target;
@@ -88,7 +87,7 @@ public class Project implements Serializable{
 
 
     /**
-     *PC端主图
+     * PC端主图
      */
     @Column(name = "pro_pc_img")
     private String pcImg;
@@ -100,7 +99,7 @@ public class Project implements Serializable{
     private String mobileImg;
 
     /**
-     *手机列表图
+     * 手机列表图
      */
     @Column(name = "pro_mobile_list_img")
     private String listImg;
@@ -111,6 +110,12 @@ public class Project implements Serializable{
     @Column(name = "pro_person_name")
     private String personName;
 
+    /**
+     * 发起人uu
+     */
+    @Column(name = "pro_useruu")
+    private Long userUU;
+
     /**
      * 发起人电话号码
      */
@@ -341,6 +346,14 @@ public class Project implements Serializable{
         this.personName = personName;
     }
 
+    public Long getUserUU() {
+        return userUU;
+    }
+
+    public void setUserUU(Long userUU) {
+        this.userUU = userUU;
+    }
+
     public String getLogo() {
         return logo;
     }

+ 34 - 6
donate-service/src/main/java/com/uas/service/donate/model/ProjectConclude.java

@@ -15,32 +15,44 @@ public class ProjectConclude {
      */
     @Id
     @GeneratedValue(strategy= GenerationType.IDENTITY)
-    @Column(name = "id")
+    @Column(name = "pc_id")
     private Long id;
 
     /**
      * 项目编号
      */
-    @Column(name="pro_id")
+    @Column(name = "pc_pro_id")
     private Long proId;
 
+    /**
+     * 项目
+     */
+    @OneToOne(cascade = CascadeType.REFRESH)
+    @JoinColumn(name = "pc_pro_id", insertable = false, updatable = false)
+    private Project project;
 
     /**
      * 项目结项管理描述
      */
-    @Column(name="conclude_description")
+    @Column(name="pc_description")
     private String description;
 
     /**
-     *表单提交状态
+     * 项目结项附图
      */
-    @Column(name="status")
+    @Column(name="pc_path")
+    private String path;
+
+    /**
+     *表单提交状态,1为已提交过
+     */
+    @Column(name="pc_status")
     private Integer status;
 
     /**
      * 提交时间
      */
-    @Column(name="submittime")
+    @Column(name="pc_submit_time")
     private Date submitTime;
 
     public Long getId() {
@@ -83,4 +95,20 @@ public class ProjectConclude {
     public void setSubmitTime(Date submitTime) {
         this.submitTime = submitTime;
     }
+
+    public Project getProject() {
+        return project;
+    }
+
+    public void setProject(Project project) {
+        this.project = project;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
 }

+ 0 - 90
donate-service/src/main/java/com/uas/service/donate/model/ProjectEvolve.java

@@ -1,90 +0,0 @@
-package com.uas.service.donate.model;
-
-import javax.persistence.*;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-/**
- * 项目进展
- */
-
-@Entity
-@Table(name = "donate$projectevolve")
-public class ProjectEvolve {
-    private static final long serialVersionUID = 1L;
-    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-
-    /**
-     * 编号
-     */
-    @Id
-    @GeneratedValue(strategy= GenerationType.IDENTITY)
-    @Column(name = "id")
-    private Long id;
-
-    /**
-     * 项目编号
-     */
-    @Column(name="pro_id")
-    private Long proId;
-
-
-    /**
-     * 项目报告描述
-     */
-    @Column(name="evolve_description")
-    private String description;
-
-    /**
-     *表单提交状态
-     */
-    @Column(name="status")
-    private Integer status;
-
-    /**
-     * 提交时间
-     */
-    @Column(name="submittime")
-    private Date submitTime;
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public Long getProId() {
-        return proId;
-    }
-
-    public void setProId(Long proId) {
-        this.proId = proId;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public Integer getStatus() {
-        return status;
-    }
-
-    public void setStatus(Integer status) {
-        this.status = status;
-    }
-
-    public String getSubmitTime() {
-        Date date = this.submitTime;
-        return date != null ? sdf.format(this.submitTime) : null;
-    }
-
-    public void setSubmitTime(Date submitTime) {
-        this.submitTime = submitTime;
-    }
-}

+ 38 - 8
donate-service/src/main/java/com/uas/service/donate/model/ProjectFinance.java

@@ -1,6 +1,7 @@
 package com.uas.service.donate.model;
 
 import javax.persistence.*;
+import java.util.Date;
 
 @Entity
 @Table(name = "donate$projectfinance")
@@ -8,49 +9,62 @@ public class ProjectFinance {
     private static final long serialVersionUID = 1L;
 
     /**
-     * 编号
+     * id
      */
     @Id
     @GeneratedValue(strategy= GenerationType.IDENTITY)
-    @Column(name = "id")
+    @Column(name = "pf_id")
     private Long id;
 
     /**
      * 项目编号
      */
-    @Column(name="pro_id")
+    @Column(name = "pf_pro_id")
     private Long proId;
 
+    /**
+     * 关联项目
+     */
+    @ManyToOne(cascade = CascadeType.REFRESH)
+    @JoinColumn(name = "pf_pro_id", insertable = false, updatable = false)
+    private Project project;
+
     /**
      * 支出类型,1:项目支出  2:执行成本
      */
-    @Column(name = "type")
+    @Column(name = "pf_type")
     private Integer type;
 
     /**
      * 支出金额
      */
-    @Column(name = "amount")
+    @Column(name = "pf_amount")
     private Long amount;
 
     /**
      * 发票图片
      */
-    @Column(name = "receipt")
+    @Column(name = "pf_receipt")
     private String path;
 
     /**
      * 项目报告描述
      */
-    @Column(name="finance_description")
+    @Column(name="pf_description")
     private String description;
 
     /**
      *表单提交状态
      */
-    @Column(name="status")
+    @Column(name="pf_status")
     private Integer status;
 
+    /**
+     * 提交时间
+     */
+    @Column(name="pf_submit_time")
+    private Date submitTime;
+
 
     public Long getId() {
         return id;
@@ -107,4 +121,20 @@ public class ProjectFinance {
     public void setPath(String path) {
         this.path = path;
     }
+
+    public Project getProject() {
+        return project;
+    }
+
+    public void setProject(Project project) {
+        this.project = project;
+    }
+
+    public Date getSubmitTime() {
+        return submitTime;
+    }
+
+    public void setSubmitTime(Date submitTime) {
+        this.submitTime = submitTime;
+    }
 }

+ 34 - 5
donate-service/src/main/java/com/uas/service/donate/model/ProjectReport.java

@@ -15,33 +15,46 @@ public class ProjectReport {
      */
     @Id
     @GeneratedValue(strategy= GenerationType.IDENTITY)
-    @Column(name = "id")
+    @Column(name = "pr_id")
     private Long id;
 
     /**
      * 项目编号
      */
-    @Column(name="pro_id")
+    @Column(name="pr_pro_id")
     private Long proId;
 
+    /**
+     * 关联项目
+     */
+    @ManyToOne(cascade = CascadeType.REFRESH)
+    @JoinColumn(name = "pr_pro_id", insertable = false, updatable = false)
+    private Project project;
+
+    /**
+     *图片URL
+     */
+    @Column(name="pr_img_path")
+    private String path;
+
 
     /**
      * 项目报告描述
      */
-    @Column(name="report_description")
+    @Column(name="pr_description")
     private String description;
 
     /**
      *表单提交状态
      */
-    @Column(name="status")
+    @Column(name="pr_status")
     private Integer status;
 
 
     /**
      * 提交时间
      */
-    @Column(name="submittime")
+    @Column(name="pr_submit_time")
     private Date submitTime;
 
     public Long getId() {
@@ -84,4 +97,20 @@ public class ProjectReport {
     public void setSubmitTime(Date submitTime) {
         this.submitTime = submitTime;
     }
+
+    public Project getProject() {
+        return project;
+    }
+
+    public void setProject(Project project) {
+        this.project = project;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
 }

+ 48 - 4
donate-service/src/main/java/com/uas/service/donate/model/UsageBufferedLogger.java

@@ -26,13 +26,25 @@ public class UsageBufferedLogger extends BufferedLogger<UsageLog> {
 	 *            消息标题
 	 * @param message
 	 *            消息
-	 * @param userUU
-	 *  		  用户uu
 	 */
 	public void log(String title, String message) {
 		log(new UsageLog(title, message, null, null));
 	}
 
+	/**
+	 * 记录使用日志
+	 *
+	 * @param title
+	 *            消息标题
+	 * @param message
+	 *            消息
+	 * @param userUU
+	 *  		  用户uu
+	 */
+	public void log(String title, String message, Long userUU) {
+		log(new UsageLog(title, message, userUU));
+	}
+
 	/**
 	 * 记录使用日志
 	 *
@@ -42,13 +54,27 @@ public class UsageBufferedLogger extends BufferedLogger<UsageLog> {
 	 *            消息
 	 * @param description
 	 *            消息详细描述
-	 * @param userUU
-	 * 			  用户uu
 	 */
 	public void log(String title, String message, String description) {
 		log(new UsageLog(title, message, description, null, null));
 	}
 
+	/**
+	 * 记录使用日志
+	 *
+	 * @param title
+	 *            消息标题
+	 * @param message
+	 *            消息
+	 * @param description
+	 *            消息详细描述
+	 * @param userUU
+	 * 			  用户uu
+	 */
+	public void log(String title, String message, String description, Long userUU) {
+		log(new UsageLog(title, message, description, null, null, userUU));
+	}
+
 	/**
 	 * 记录具体单据操作日志
 	 *
@@ -68,4 +94,22 @@ public class UsageBufferedLogger extends BufferedLogger<UsageLog> {
 		log(new UsageLog(title, message, description, relativeCode, relativeKey));
 	}
 
+	/**
+	 * 记录具体单据操作日志
+	 *
+	 * @param title
+	 *            消息标题
+	 * @param message
+	 *            消息
+	 * @param description
+	 *            消息详细描述
+	 * @param relativeCode
+	 *            相关单据号
+	 * @param relativeKey
+	 *            相关单据主键
+	 */
+	public void log(String title, String message, String description,
+					String relativeCode, Long relativeKey, Long userUU) {
+		log(new UsageLog(title, message, description, relativeCode, relativeKey, userUU));
+	}
 }

+ 20 - 3
donate-service/src/main/java/com/uas/service/donate/model/UsageLog.java

@@ -78,7 +78,7 @@ public class UsageLog extends BufferedLogable {
 	@Column(name = "rel_key")
 	private Long key;
 
-	@JsonIgnore
+    @JsonIgnore
 	@JSONField(serialize = false)
 	public Long getId() {
 		return id;
@@ -156,6 +156,22 @@ public class UsageLog extends BufferedLogable {
 
 	}
 
+	public UsageLog(String title, String message, Long userUU) {
+		this.title = title;
+		this.message = message;
+		this.time = new Date();
+		this.userUU = userUU;
+	}
+
+	public UsageLog(String title, String message, String code, Long key) {
+		this.title = title;
+		this.message = message;
+		this.code = code;
+		this.key = key;
+		this.time = new Date();
+		this.userUU = null != SystemSession.getUser() ? SystemSession.getUser().getUserUU() : null;
+	}
+
 	public UsageLog(String title, String message, String detail, String code, Long key) {
 		this.title = title;
 		this.message = message;
@@ -166,13 +182,14 @@ public class UsageLog extends BufferedLogable {
 		this.userUU = null != SystemSession.getUser() ? SystemSession.getUser().getUserUU() : null;
 	}
 
-	public UsageLog(String title, String message, String code, Long key) {
+	public UsageLog(String title, String message, String detail, String code, Long key, Long userUU) {
 		this.title = title;
 		this.message = message;
+		this.detail = detail;
 		this.code = code;
 		this.key = key;
 		this.time = new Date();
-		this.userUU = null != SystemSession.getUser() ? SystemSession.getUser().getUserUU() : null;
+		this.userUU = userUU;
 	}
 
 	public void bufferedLog(String bufferedMessage) {

+ 7 - 0
donate-service/src/main/java/com/uas/service/donate/service/MessageService.java

@@ -1,5 +1,6 @@
 package com.uas.service.donate.service;
 
+import com.uas.service.donate.model.MessageDetail;
 import org.springframework.http.ResponseEntity;
 import java.util.List;
 import java.util.Map;
@@ -29,4 +30,10 @@ public interface MessageService {
      * @return response
      */
     ResponseEntity<String> sendMessage(String receiverTel, List<Object> obj, String msgId);
+
+    /**
+     * 推送消息到app
+     * @param saveDetails 消息内容
+     */
+    void pushReleases(List<MessageDetail> saveDetails);
 }

+ 0 - 14
donate-service/src/main/java/com/uas/service/donate/service/ProjectEvolveService.java

@@ -1,14 +0,0 @@
-package com.uas.service.donate.service;
-
-
-import com.uas.service.donate.model.ProjectEvolve;
-
-import java.util.List;
-
-public interface ProjectEvolveService {
-
-    ProjectEvolve save(ProjectEvolve projectEvolve);
-
-    //查找某项目所有的项目进度
-    List<ProjectEvolve> findAll(Long proId);
-}

+ 6 - 0
donate-service/src/main/java/com/uas/service/donate/service/ProjectReportService.java

@@ -3,7 +3,13 @@ package com.uas.service.donate.service;
 
 import com.uas.service.donate.model.ProjectReport;
 
+import java.util.List;
+
 
 public interface ProjectReportService {
+
     ProjectReport save(ProjectReport projectReport);
+
+    //查找某项目所有的项目进度
+    List<ProjectReport> findAll(Long proId);
 }

+ 5 - 1
donate-service/src/main/java/com/uas/service/donate/service/impl/ActivityRecodeServiceImpl.java

@@ -3,6 +3,7 @@ package com.uas.service.donate.service.impl;
 import com.uas.service.donate.dao.ActivityRecodeDao;
 import com.uas.service.donate.dao.ProjectRecodeDao;
 import com.uas.service.donate.dao.UserDao;
+import com.uas.service.donate.event.ActivityJoinedPublishEvent;
 import com.uas.service.donate.model.Activity;
 import com.uas.service.donate.model.ActivityRecode;
 import com.uas.service.donate.model.ProjectRecode;
@@ -10,10 +11,12 @@ import com.uas.service.donate.model.User;
 import com.uas.service.donate.service.ActivityRecodeService;
 import com.uas.service.donate.service.ActivityService;
 import com.uas.service.donate.service.ProjectService;
+import com.uas.service.donate.util.ContextUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 
@@ -71,9 +74,10 @@ public class ActivityRecodeServiceImpl implements ActivityRecodeService {
         joinAmount++;
         activity.setJoinAmount(joinAmount);
         activityService.save(activity);
-        activityRecodeDao.save(activityRecode);
+        activityRecode = activityRecodeDao.save(activityRecode);
         user.setActTimes((user.getActTimes() != null ? user.getActTimes() : 0) + 1);
         userDao.save(user);
+        ContextUtils.publishEvent(new ActivityJoinedPublishEvent(Collections.singletonList(activityRecode)));
         return activityRecode;
     }
 

+ 6 - 5
donate-service/src/main/java/com/uas/service/donate/service/impl/ActivityServiceImpl.java

@@ -5,21 +5,20 @@ import com.uas.service.donate.core.support.SystemSession;
 import com.uas.service.donate.dao.ActivityDao;
 import com.uas.service.donate.dao.ActivityRecodeDao;
 import com.uas.service.donate.dao.AwardDao;
+import com.uas.service.donate.event.TakePrizePublishEvent;
 import com.uas.service.donate.model.Activity;
 import com.uas.service.donate.model.ActivityRecode;
 import com.uas.service.donate.model.Project;
 import com.uas.service.donate.service.ActivityService;
 import com.uas.service.donate.service.MessageService;
+import com.uas.service.donate.util.ContextUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 import org.springframework.ui.ModelMap;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 
 @Service
 public class ActivityServiceImpl implements ActivityService {
@@ -131,7 +130,9 @@ public class ActivityServiceImpl implements ActivityService {
         // 短信模版:恭喜您获得优软一元捐感恩回馈活动二等奖(南山天虹购物礼券100元),兑换码123456,请登陆一元捐网站,进入活动中心激活领取
         record.setStatus(HAS_GOT_AWARD);
         record.setReceiveTime(new Date());
-        activityRecodeDao.save(record);
+        record = activityRecodeDao.save(record);
+        // 产生消息
+        ContextUtils.publishEvent(new TakePrizePublishEvent(Collections.singletonList(record)));
         map.put("success", "领奖成功!");
         //TODO 领奖成功短信及消息
         try {

+ 69 - 3
donate-service/src/main/java/com/uas/service/donate/service/impl/MessageServiceImpl.java

@@ -1,22 +1,29 @@
 package com.uas.service.donate.service.impl;
 
+import com.uas.account.util.AccountUtils;
 import com.uas.message.mail.service.MailService;
 import com.uas.platform.core.logging.BufferedLoggerManager;
+import com.uas.platform.core.model.Constant;
 import com.uas.platform.core.util.HttpUtil;
 import com.uas.platform.core.util.serializer.FlexJsonUtils;
 import com.uas.service.donate.MessageConfiguration;
-import com.uas.service.donate.core.support.SystemSession;
+import com.uas.service.donate.dao.MessageDetailDao;
+import com.uas.service.donate.dao.UserDao;
+import com.uas.service.donate.model.MessageDetail;
 import com.uas.service.donate.model.SmsMessage;
 import com.uas.service.donate.model.UsageBufferedLogger;
+import com.uas.service.donate.model.User;
 import com.uas.service.donate.service.MessageService;
 import com.uas.service.donate.util.StringUtils;
+import com.uas.sso.common.util.HttpUtil.ResponseWrap;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
-import java.util.List;
-import java.util.Map;
+import java.sql.Savepoint;
+import java.util.*;
 
 /**
  * 发送消息提醒实现方法
@@ -31,8 +38,16 @@ public class MessageServiceImpl implements MessageService {
     @Autowired
     private MessageConfiguration messageConfiguration;
 
+    @Autowired
+    private MessageDetailDao messageDetailDao;
+
+    @Autowired
+    private UserDao userDao;
+
     private static final UsageBufferedLogger logger = BufferedLoggerManager.getLogger(UsageBufferedLogger.class);
 
+    private final static String PROD_URL = "http://113.105.74.140:8092/tigase/baiduPush";
+
     /**
      * 发送邮件
      * @param receivedEmail 接收邮箱
@@ -89,4 +104,55 @@ public class MessageServiceImpl implements MessageService {
             return new ResponseEntity<String>(HttpStatus.INTERNAL_SERVER_ERROR);
         }
     }
+
+    @Override
+    public void pushReleases(List<MessageDetail> saveDetails) {
+        List<Long> detailIds = new ArrayList<>();
+        Set<Long> userUUs = new HashSet<>();
+        for (MessageDetail messageDetail : saveDetails) {
+            // 推送消息同一个人只推一次
+            if (messageDetail.getReceiveUserUU() != null && !userUUs.contains(messageDetail.getReceiveUserUU())) {
+                Map<String, Object> params = new HashMap<>();
+                User receiver = messageDetail.getReceiveUser();
+                // 如果imId为空,先去账户中心获取
+                //TODO 账户中心还未部署,部署之后打开注释
+//                if (null == receiver.getUserIMId()) {
+//                    Long imId = AccountUtils.getImIdByUserUU(messageDetail.getReceiveUserUU());
+//                    User user = userDao.findOne(receiver.getUserUU());
+//                    user.setUserIMId(imId);
+//                    receiver = userDao.save(user);
+//                }
+                // 防止获取失败,再判断一次
+                if (null != receiver.getUserIMId()) {
+                    params.put("master", messageDetail.getMessage().getUser().getOrg().getName());//账套 公司名称
+                    params.put("userid", String.valueOf(receiver.getUserIMId()));//推送目标用户
+                    params.put("title", messageDetail.getMessage().getTitle());//推送标题
+                    params.put("content", messageDetail.getMessage().getContext());//正文
+//                        params.put("enUU", String.valueOf(releaseDetail.getVendUU()));//UU号
+                    params.put("url", "");//跳转链接地址
+                    params.put("pageTitle", messageDetail.getMessage().getTitle());//页面标题
+                    params.put("platform", "donate");//系统名称,ERP或
+                    try {
+                        ResponseWrap res = com.uas.sso.common.util.HttpUtil.doPost(PROD_URL, params);
+                        if (!res.isSuccess()) {
+                            logger.log("推送消息", "推送消息失败,目标用户UU:" + messageDetail.getReceiveUserUU(), res.getContent(), messageDetail.getMessage().getUserUU());
+                            throw new Exception(res.getContent());
+                        } else {
+                            logger.log("推送消息", "推送消息成功,目标用户UU:" + messageDetail.getReceiveUserUU(), messageDetail.getMessage().getTitle(), messageDetail.getMessage().getUserUU());
+                            userUUs.add(messageDetail.getReceiveUserUU());
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+            if (null != messageDetail.getId()) {
+                messageDetail.setPushStatus(Constant.YES);
+                detailIds.add(messageDetail.getId());
+            }
+        }
+        if (!CollectionUtils.isEmpty(detailIds)) {
+            messageDetailDao.setPushedByIds(detailIds.toArray());
+        }
+    }
 }

+ 0 - 25
donate-service/src/main/java/com/uas/service/donate/service/impl/ProjectEvolveServiceImpl.java

@@ -1,25 +0,0 @@
-package com.uas.service.donate.service.impl;
-
-import com.uas.service.donate.dao.ProjectEvolveDao;
-import com.uas.service.donate.model.ProjectEvolve;
-import com.uas.service.donate.service.ProjectEvolveService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-@Service
-public class ProjectEvolveServiceImpl implements ProjectEvolveService {
-    @Autowired
-    private ProjectEvolveDao projectEvolveDao;
-
-    @Override
-    public ProjectEvolve save(ProjectEvolve projectEvolve) {
-        return projectEvolveDao.save(projectEvolve);
-    }
-
-    //查找某项目所有的项目进度
-    public List<ProjectEvolve> findAll(Long proId){
-        return projectEvolveDao.findAll(proId);
-    }
-}

+ 6 - 0
donate-service/src/main/java/com/uas/service/donate/service/impl/ProjectReportServiceImpl.java

@@ -7,6 +7,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.Date;
+import java.util.List;
 
 @Service
 public class ProjectReportServiceImpl implements ProjectReportService {
@@ -20,4 +21,9 @@ public class ProjectReportServiceImpl implements ProjectReportService {
         return projectReportDao.save(projectReport);
     }
 
+    //查找某项目所有的项目进度
+    public List<ProjectReport> findAll(Long proId){
+        return projectReportDao.findByProId(proId);
+    }
+
 }

+ 1 - 1
donate-service/src/main/webapp/resources/js/common/query/Project.js

@@ -67,7 +67,7 @@ define ([ 'ngResource' ], function() {
             },
             // 获取所有项目进度
             getSchedules: {
-                url:'projectevolve/getEvolves/:proId',
+                url:'projectreport/getEvolves/:proId',
                 method: 'GET',
                 params: {
                     proId : 'proId'