dongbw 8 år sedan
förälder
incheckning
837ce3a2ca
26 ändrade filer med 447 tillägg och 101 borttagningar
  1. 21 2
      donate-console/src/main/java/com/uas/console/donate/controller/ProjectRecodeController.java
  2. 5 0
      donate-console/src/main/java/com/uas/console/donate/service/ProjectRecodeService.java
  3. 42 0
      donate-console/src/main/java/com/uas/console/donate/service/impl/ProjectRecodeServiceImpl.java
  4. 1 0
      donate-console/src/main/webapp/resources/css/base.css
  5. 1 1
      donate-console/src/main/webapp/resources/js/common/services.js
  6. 124 35
      donate-console/src/main/webapp/resources/js/index/app.js
  7. 10 4
      donate-console/src/main/webapp/resources/js/index/services/Project.js
  8. 1 1
      donate-console/src/main/webapp/resources/view/activity/activity_detail.html
  9. 16 7
      donate-console/src/main/webapp/resources/view/activity/activity_launch.html
  10. 45 22
      donate-console/src/main/webapp/resources/view/project/project_detail.html
  11. 20 20
      donate-console/src/main/webapp/resources/view/project/project_list.html
  12. 6 0
      donate-service/pom.xml
  13. 1 1
      donate-service/src/main/java/com/uas/service/donate/SSOConfiguration.java
  14. 12 0
      donate-service/src/main/java/com/uas/service/donate/controller/ProjectController.java
  15. 23 2
      donate-service/src/main/java/com/uas/service/donate/controller/SecurityController.java
  16. 8 0
      donate-service/src/main/java/com/uas/service/donate/service/ProjectService.java
  17. 5 1
      donate-service/src/main/java/com/uas/service/donate/service/impl/ActivityRecodeServiceImpl.java
  18. 29 0
      donate-service/src/main/java/com/uas/service/donate/service/impl/ProjectServiceImpl.java
  19. 1 0
      donate-service/src/main/resources/dev/account.properties
  20. 2 0
      donate-service/src/main/resources/prod/account.properties
  21. 1 0
      donate-service/src/main/resources/test/account.properties
  22. 4 0
      donate-service/src/main/webapp/resources/js/common/query/Project.js
  23. 17 1
      donate-service/src/main/webapp/resources/js/common/services.js
  24. 44 2
      donate-service/src/main/webapp/resources/js/project/app.js
  25. 1 1
      donate-service/src/main/webapp/resources/js/project/controllers/ProjectDetailCtrl.js
  26. 7 1
      donate-service/src/main/webapp/resources/view/project/donationsOver.html

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

@@ -1,16 +1,21 @@
 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.service.ProjectRecodeService;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
+import org.springframework.data.domain.Page;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
 
-@Controller
+@RestController
 @RequestMapping("/projectrecode")
 public class ProjectRecodeController {
 
@@ -25,4 +30,18 @@ public class ProjectRecodeController {
         return projectRecodeService.findProjectDetail(proId);
     }
 
+    /**
+     * 查询捐款记录
+     */
+    @RequestMapping(value="/getRecordsPage", method = RequestMethod.GET)
+    public Page<ProjectRecode> getRecordsPage(PageParams params, String searchFilter) {
+        PageInfo pageInfo = new PageInfo(params);
+        SearchFilter filter = JSONObject.parseObject(searchFilter, SearchFilter.class);
+        Long proId = Long.valueOf(filter.getType());
+        if (null != proId) {
+            return projectRecodeService.getRecordsPage(proId, pageInfo, filter);
+        }
+        return null;
+    }
+
 }

+ 5 - 0
donate-console/src/main/java/com/uas/console/donate/service/ProjectRecodeService.java

@@ -1,6 +1,9 @@
 package com.uas.console.donate.service;
 
 import com.uas.console.donate.model.ProjectRecode;
+import com.uas.console.donate.model.SearchFilter;
+import com.uas.platform.core.model.PageInfo;
+import org.springframework.data.domain.Page;
 
 import java.util.List;
 
@@ -8,4 +11,6 @@ public interface ProjectRecodeService {
 
     //展示某项目的捐款明细
     List<ProjectRecode> findProjectDetail(Long proId);
+
+    Page<ProjectRecode> getRecordsPage(Long proId, PageInfo pageInfo, SearchFilter filter);
 }

+ 42 - 0
donate-console/src/main/java/com/uas/console/donate/service/impl/ProjectRecodeServiceImpl.java

@@ -2,10 +2,20 @@ package com.uas.console.donate.service.impl;
 
 import com.uas.console.donate.dao.ProjectRecodeDao;
 import com.uas.console.donate.model.ProjectRecode;
+import com.uas.console.donate.model.SearchFilter;
 import com.uas.console.donate.service.ProjectRecodeService;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
+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;
 
 @Service
@@ -15,8 +25,40 @@ public class ProjectRecodeServiceImpl implements ProjectRecodeService {
     private ProjectRecodeDao projectRecodeDao;
 
     //展示某项目的所有捐款明细
+    @Override
     public List<ProjectRecode> findProjectDetail(Long proId){
 
         return projectRecodeDao.findProjectDetail(proId);
     }
+
+    @Override
+    public Page<ProjectRecode> getRecordsPage(final Long proId, final PageInfo pageInfo, final SearchFilter filter) {
+        return projectRecodeDao.findAll(new Specification<ProjectRecode>() {
+            @Override
+            public Predicate toPredicate(Root<ProjectRecode> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+                if (null != proId) {
+                    pageInfo.expression(PredicateUtils.eq("proId", proId, false));
+                }
+                if (null != filter) {
+                    String keyword = filter.getKeyword();
+                    if (StringUtils.hasText(keyword)) {
+                        pageInfo.expression(PredicateUtils.or(PredicateUtils.like("way", keyword, false),
+                                PredicateUtils.like("amount", keyword, false),
+                                PredicateUtils.like("user.name", keyword, false),
+                                PredicateUtils.like("user.tel", keyword, false),
+                                PredicateUtils.like("user.userEmail", keyword, false)));
+                    }
+                    // 默认为全部方式
+                    if (null != filter.getArea() && !"".equals(filter.getArea()) && !"全部方式".equals(filter.getArea())) {
+                        pageInfo.expression(PredicateUtils.eq("way", filter.getArea(), false));
+                    }
+                    if (null != filter.getFromDate()) {
+                        pageInfo.expression(PredicateUtils.gte("time", filter.getFromDate(), false));
+                    }
+                }
+                query.where(pageInfo.getPredicates(root, query, cb));
+                return null;
+            }
+        }, pageInfo);
+    }
 }

+ 1 - 0
donate-console/src/main/webapp/resources/css/base.css

@@ -281,6 +281,7 @@ textarea {
 /*搜索无结果*/
 .noSearch .img{
 	margin: 50px auto 26px;
+	text-align: center;
 }
 .noSearch .img img{
 	width: 80px;

+ 1 - 1
donate-console/src/main/webapp/resources/js/common/services.js

@@ -217,7 +217,7 @@ define([ 'angular', 'common/utils', 'ngResource'], function(angular, utils, Big)
             },
             redirectRegister: function() {
                 // 获取跳转注册的url
-                $http.get(rootPath + '/register/page', {
+                $http.get(rootPath + '/sso/register/page', {
                     params: {
                         returnUrl: window.location.href
                     }

+ 124 - 35
donate-console/src/main/webapp/resources/js/index/app.js

@@ -353,8 +353,8 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
     /**
      * 项目详情框
      */
-    app.controller('ProjectDetailCtrl', ['$scope', 'Project', 'toaster', '$modalInstance', 'BaseService', 'id', '$modal', '$sce',
-        function($scope, Project, toaster, $modalInstance, BaseService, id, $modal, $sce) {
+    app.controller('ProjectDetailCtrl', ['$scope', 'Project', 'toaster', '$modalInstance', 'BaseService', 'id', '$modal', '$sce', 'ngTableParams',
+        function($scope, Project, toaster, $modalInstance, BaseService, id, $modal, $sce, ngTableParams) {
 
         var loadData = function() {
             // 获取项目详情
@@ -365,6 +365,7 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
                 toaster.pop('error', '详情加载失败');
             });
         };
+        loadData();
 
         // 获取当前项目所有进度
         $scope.getSchedules = function() {
@@ -376,12 +377,83 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
         };
 
         // 获取当前项目捐款明细
-        $scope.getRecords = function() {
-            Project.getRecords({id:id}, {}, function(data) {
-                $scope.projectRecords = data;
-            }, function() {
-                toaster.pop('error', '捐款明细加载失败');
-            });
+        // $scope.getRecords = function() {
+        //     Project.getRecords({proId:id}, {}, function(data) {
+        //         $scope.projectRecords = data;
+        //     }, function() {
+        //         toaster.pop('error', '捐款明细加载失败');
+        //     });
+        // };
+        $scope.recordParams = new ngTableParams({
+            page: 1,
+            count: 5,
+            sorting: {
+                'id': 'desc'
+            }
+        }, {
+            total: 0,
+            counts: [],
+            getData: function ($defer, params) {
+                $scope.loading = true;
+                var pageParams = params.url();
+                pageParams.searchFilter = { // 筛选条件
+                    keyword: $scope.keyword,
+                    // 此处area作为支付方式过滤
+                    area: $scope.way,
+                    fromDate : null !== $scope.fromDate ? $scope.fromDate.getTime(): null,
+                    // proId过滤
+                    type: id
+                };
+                Project.getRecordsPage.call(null, BaseService.parseParams(pageParams), function (page) {
+                    $scope.loading = false;
+                    if (page) {
+                        params.total(page.totalElements);
+                        $defer.resolve(page.content);
+                        // $scope.keywordXls = angular.copy($scope.keyword); // 保存当前取值的关键词  做导出时需要的字段
+                    }
+                }, function (response) {
+                    $scope.loading = false;
+                    toaster.pop('error', '数据加载失败', response.data);
+                });
+            }
+        });
+
+        // 搜索
+        $scope.onSearch = function() {
+          if ($scope.recordParams.page() === 1) {
+              $scope.recordParams.reload();
+          } else {
+              $scope.recordParams.page(1);
+          }
+        };
+
+        $scope.fromDate = null;
+        $scope.setTime = function(type) {
+            var fromDate = new Date();
+            fromDate.setHours(0, 0, 0, 0);
+            switch (type) {
+                // 一周内
+                case '7' :
+                    fromDate.setDate(fromDate.getDate() - 7) ;
+                    $scope.fromDate = fromDate;
+                    break;
+                // 一个月内
+                case '1' :
+                    fromDate.setMonth(fromDate.getMonth() - 1) ;
+                    $scope.fromDate = fromDate;
+                    break;
+                // 三个月内
+                case '3' :
+                    fromDate.setMonth(fromDate.getMonth() - 3) ;
+                    $scope.fromDate = fromDate;
+                    break;
+                // 半年内
+                case '6' :
+                    fromDate.setMonth(fromDate.getMonth() - 6) ;
+                    $scope.fromDate = fromDate;
+                    break;
+            }
+            $scope.recordParams.reload();
         };
 
         // 获取当前项目财务信息
@@ -395,7 +467,6 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
                 toaster.pop('error','财务明细加载失败');
             });
         };
-        loadData();
 
         $scope.cancel= function() {
             $modalInstance.dismiss();
@@ -2246,47 +2317,65 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
 
         // 添加选中
         $scope.addSelected = function() {
-            // $scope.tempSelectedProjects = angular.copy($scope.selectedProjects);
-            // $scope.tempProjects = angular.copy($scope.projects);
-            angular.forEach($scope.projects, function(project, index) {
+            // angular.forEach($scope.projects, function(project, index) {
+            //     if (project.checked) {
+            //         project.checked = false;
+            //         if (angular.isUndefined($scope.selectedProjects)) {
+            //             $scope.selectedProjects = [];
+            //         }
+            //         $scope.selectedProjects.push(project);
+            //         $scope.projects.splice(index, 1);
+            //     }
+            // });
+            // angular.forEach($scope.projects, function(project, index) {
+            //     if (project.checked) {
+            //         project.checked = false;
+            //         $scope.selectedProjects.push(project);
+            //         $scope.projects.splice(index, 1);
+            //     }
+            // });
+            var i = 0;
+            for (i; i< $scope.projects.length; i++) {
+                var project = $scope.projects[i];
                 if (project.checked) {
                     project.checked = false;
                     if (angular.isUndefined($scope.selectedProjects)) {
                         $scope.selectedProjects = [];
                     }
                     $scope.selectedProjects.push(project);
-                    $scope.projects.splice(index, 1);
+                    $scope.projects.splice(i, 1);
+                    i = i-1;
                 }
-            });
-            angular.forEach($scope.projects, function(project, index) {
-                if (project.checked) {
-                    project.checked = false;
-                    $scope.selectedProjects.push(project);
-                    $scope.projects.splice(index, 1);
-                }
-            });
+            }
         };
 
         // 删除选中
         $scope.deleteSelected = function() {
-            // $scope.tempSelectedProjects = angular.copy($scope.selectedProjects);
-            // $scope.tempProjects = angular.copy($scope.projects);
-            // 存在取消操作,用temp过渡
-            // 因为会splice,所以相邻的被选中需要遍历两次
-            angular.forEach($scope.selectedProjects, function(project, index) {
-                if (project.checked) {
-                    project.checked = false;
-                    $scope.projects.push(project);
-                    $scope.selectedProjects.splice(index, 1);
-                }
-            });
-            angular.forEach($scope.selectedProjects, function(project, index) {
+            // // 存在取消操作,用temp过渡
+            // angular.forEach($scope.selectedProjects, function(project, index) {
+            //     if (project.checked) {
+            //         project.checked = false;
+            //         $scope.projects.push(project);
+            //         $scope.selectedProjects.splice(index, 1);
+            //     }
+            // });
+            // angular.forEach($scope.selectedProjects, function(project, index) {
+            //     if (project.checked) {
+            //         project.checked = false;
+            //         $scope.projects.push(project);
+            //         $scope.selectedProjects.splice(index, 1);
+            //     }
+            // });
+            var i = 0;
+            for (i; i< $scope.selectedProjects.length; i++) {
+                var project = $scope.selectedProjects[i];
                 if (project.checked) {
                     project.checked = false;
                     $scope.projects.push(project);
-                    $scope.selectedProjects.splice(index, 1);
+                    $scope.selectedProjects.splice(i, 1);
+                    i = i -1;
                 }
-            });
+            }
         };
 
         // 取消

+ 10 - 4
donate-console/src/main/webapp/resources/js/index/services/Project.js

@@ -55,15 +55,21 @@ define ([ 'ngResource' ], function() {
             },
             // 获取项目所有捐款明细
             getRecords: {
-                url:'projectrecode/getRecords/:proId',
+                url:'projectrecode/getRecords',
                 method:'GET',
                 params: {
-                    id: 'proId'
-                }
+                    proId: 'proId'
+                },
+                isArray: true
+            },
+            // 分页获取项目捐款明细
+            getRecordsPage: {
+                url: 'projectrecode/getRecordsPage',
+                method: 'GET'
             },
             // 获取财务支出
             getFinance: {
-                url:'projectFinance/getFinance/:id',
+                url: 'projectFinance/getFinance/:id',
                 method: 'GET',
                 params: {
                     id: 'id'

+ 1 - 1
donate-console/src/main/webapp/resources/view/activity/activity_detail.html

@@ -98,7 +98,7 @@
                     <!--<option ng-value="2">短信通知</option>-->
                 <!--</select>-->
             </div>
-            <div class="price">
+            <div class="price" ng-if="award.img != null">
                 <img src="{{award.img}}" alt="奖品示例图" title="奖品示例图"/>
             </div>
         </div>

+ 16 - 7
donate-console/src/main/webapp/resources/view/activity/activity_launch.html

@@ -610,6 +610,15 @@
         color: #fff;
     }
 
+    /* datepicker 今天按钮隐藏,清除按钮样式修改 */
+    div.active-time ul.dropdown-menu span.btn-group.pull-left>button.btn:first-child{
+        display: none;
+    }
+
+    div.active-time ul.dropdown-menu span.btn-group.pull-left>button.btn:nth-child(2){
+        border-bottom-left-radius: 3px;
+        border-top-left-radius: 3px;
+    }
 </style>
 <!-- loading start -->
 <div class="loading in" ng-class="{'in': loading}"><i></i></div>
@@ -625,7 +634,7 @@
                 <div class="content-setting">
                     <div class="form-group clearfix">
                         <label class="control-label fl">活动标题</label>
-                        <input type="text" class="form-control fl" name="activityName" ng-model="activity.name" required/>
+                        <input type="text" class="form-control fl" name="activityName" maxlength="40" ng-model="activity.name" required/>
 
                         <span class="error" ng-show="submited && activityForm.activityName.$error.required">*活动标题不能为空</span>
                     </div>
@@ -680,7 +689,7 @@
                     <div class="form-group clearfix">
                         <label class="control-label fl">活动介绍</label>
                         <div class="fl introduce">
-                            <summernote lang="zh-CN" ng-model="activity.summary" height="300px">
+                            <summernote lang="zh-CN" ng-model="activity.summary" height="300px" maxlength="3500">
                             </summernote>
                         </div>
 
@@ -690,7 +699,7 @@
                         <label class="control-label fl">封面图片</label>
                         <div class="fl uploadImage">
                             <div><button>上传图片</button><span>(160*160)</span></div>
-                            <input type="file" ng-multiple="false" accept="image/*" onchange='angular.element(this).scope().fileChanged(this, 0)'>
+                            <input type="file" ng-multiple="false" id="actImg" accept="image/*" onchange='angular.element(this).scope().fileChanged(this, 0)'>
                             <div ng-if="null != actImgUrl" class="showImg">
                                 <img src="{{actImgUrl}}" alt="活动图片">
                                 <span class="hover-show">
@@ -706,7 +715,7 @@
                         <label class="control-label fl">Banner</label>
                         <div class="fl uploadImage">
                             <div><button>上传图片</button><span>(1140*140)</span></div>
-                            <input type="file" ng-multiple="false" accept="image/*" onchange='angular.element(this).scope().fileChanged(this, 1)'>
+                            <input type="file" ng-multiple="false" id="banner" accept="image/*" onchange='angular.element(this).scope().fileChanged(this, 1)'>
                             <div ng-if="null != bannerUrl"  class="showImg showImgs">
                                 <img src="{{bannerUrl}}" alt="Banner">
                                 <span class="hover-show">
@@ -729,19 +738,19 @@
                                 </div>
                                 <div class="award-detail clearfix">
                                     <span class="fl">简介</span>
-                                    <input type="text" ng-model="award.awardSummary" class="fl form-control" required>
+                                    <input type="text" ng-model="award.awardSummary" maxlength="100" class="fl form-control" required>
 
                                     <span class="error" ng-show="submited && award.awardSummary == null">*活动奖品的简介不能为空</span>
                                 </div>
                                 <div class="award-detail clearfix">
                                     <span class="fl">数量</span>
-                                    <input type="text" ng-model="award.amount" class="fl form-control" required>
+                                    <input ng-pattern="/^[1-9]\d*$/" type="text" ng-model="award.amount" class="fl form-control" required>
 
                                     <span class="error" ng-show="submited && award.amount == null">*活动奖品的数量不能为空</span>
                                 </div>
                                 <div class="award-detail clearfix">
                                     <span class="fl">奖品等级</span>
-                                    <input type="text" ng-model="award.awardLevel" class="fl form-control" required>
+                                    <input type="text" ng-model="award.awardLevel" maxlength="10" class="fl form-control" required>
 
                                     <span class="error" ng-show="submited && award.awardLevel == null">*活动奖品的奖品等级不能为空</span>
                                 </div>

+ 45 - 22
donate-console/src/main/webapp/resources/view/project/project_detail.html

@@ -27,9 +27,9 @@
         <!--<span>项目进度</span>-->
         <!--<span>捐款明细</span>-->
         <!--<span>财务披露</span></div>-->
-        <span ng-if="project.status== 1">项目进度</span>
-        <span ng-if="project.status== 1">捐款明细</span>
-        <span ng-if="project.status== 1">财务披露</span>
+        <span ng-if="project.status== 1" ng-click="getSchedules()">项目进度</span>
+        <span ng-if="project.status== 1" ng-click="getRecords()">捐款明细</span>
+        <span ng-if="project.status== 1" ng-click="getFinance()">财务披露</span>
     </div>
     <!--详细信息-->
     <div class="right-list show">
@@ -237,10 +237,15 @@
     </div>
     <!--项目进度-->
     <div class="right-list">
-        <div ng-if="schedules.length == 0" class="list-message">
-            <p class="first-txt" style="text-align: center; color: #a0a0a0; font-size: 22px;">
-                该项目暂无进度!
-            </p>
+        <div ng-if="schedules.length == 0">
+            <div class="section noSearch">
+                <div class="img">
+                    <img src="static/images/noSearch.png" alt=""/>
+                </div>
+                <div class="txt">
+                    <p>该项目暂无进度!</p>
+                </div>
+            </div>
         </div>
         <div class="list-message" ng-repeat="schedule in schedules | orderBy : '-date'">
             <p class="first-txt">
@@ -256,20 +261,26 @@
         <div class="list-message">
             <div class="clearfix">
                 <div class="fl choose">
-                    <select name="" id="">
-                        <option value="">全部时段</option>
+                    <select ng-model="active" ng-change="setTime(active)" ng-init="active ='全部时段'">
+                        <option ng-value="'全部时段'">全部时段</option>
+                        <option ng-value="'7'">一周内</option>
+                        <option ng-value="'1'">一个月内</option>
+                        <option ng-value="'3'">三个月内</option>
+                        <option ng-value="'6'">半年内</option>
                     </select>
-                    <select name="" id="">
-                        <option value="">全部方式</option>
+                    <select ng-model="way" ng-change="onSearch()" ng-init="way='全部方式'">
+                        <option ng-value="'全部方式'">全部方式</option>
+                        <option ng-value="'支付宝'">支付宝</option>
+                        <option ng-value="'微信支付'">微信支付</option>
                     </select>
                 </div>
                 <div class="fr search">
-                    <input type="text" ng-model="keyword" ng-search="onSearch(keyword)" ng-init="keyword = ''" placeholder="请输入关键词"/>
-                    <button ng-click="onSearch(keyword)">搜索</button>
+                    <input type="text" ng-model="keyword" ng-search="onSearch()" placeholder="请输入关键词"/>
+                    <button ng-click="onSearch()">搜索</button>
                 </div>
             </div>
         </div>
-        <table>
+        <table ng-table="recordParams">
             <thead>
             <tr>
                 <th width="50"></th>
@@ -280,12 +291,21 @@
                 <th width="210"></th>
             </tr>
             </thead>
-            <tbody ng-if="projectRecords.length == 0" class="list-message">
-                <td colspan="6" class="first-txt" style="text-align: center; color: #a0a0a0; font-size: 22px;">
-                    该项目暂无进度!
+            <tbody ng-if="recordParams.total() == 0">
+            <tr>
+                <td colspan="6">
+                    <div class="section noSearch">
+                        <div class="img">
+                            <img src="static/images/noSearch.png" alt=""/>
+                        </div>
+                        <div class="txt">
+                            <p>该项目暂无捐款明细!</p>
+                        </div>
+                    </div>
                 </td>
+            </tr>
             </tbody>
-            <tbody ng-repeat="record in projectRecords">
+            <tbody ng-repeat="record in $data">
             <tr>
                 <td></td>
                 <td>{{record.user.userName}}</td>
@@ -331,10 +351,13 @@
                 <span>支出明细</span>
             </div>
             <div class="list-body clearfix">
-                <div ng-if="projectFinance.length == 0" class="list-message">
-                <p colspan="6" class="first-txt" style="text-align: center; color: #a0a0a0; font-size: 22px;">
-                    该项目暂无进度!
-                </p>
+                <div class="section noSearch" ng-if="projectFinance.length == 0">
+                    <div class="img">
+                        <img src="static/images/noSearch.png" alt=""/>
+                    </div>
+                    <div class="txt">
+                        <p>该项目暂无支出记录!</p>
+                    </div>
                 </div>
                 <div class="msg-list" ng-repeat="finance in projectFinance">
                     <span class="fl" ng-bind="finace.submitTime | date :'yyyy-MM-dd'"></span>

+ 20 - 20
donate-console/src/main/webapp/resources/view/project/project_list.html

@@ -360,12 +360,12 @@
         margin-bottom: 34px;
         width: 560px;
         height: 310px;
-        border: 1px solid #dcdcdc;
-        background: #e5e5e5;
+        /*border: 1px solid #dcdcdc;*/
+        /*background: #e5e5e5;*/
     }
-    .right-list .list-body .msg-list div.pcMainImg input{
-        width: 100%;
-        height: 100%;
+    .right-list .list-body .msg-list div.pcMainImg img{
+        max-width: 100%;
+        max-height: 100%;
         outline: none;
         opacity: 1;
     }
@@ -373,12 +373,12 @@
         margin-bottom: 34px;
         width: 750px;
         height: 550px;
-        border: 1px solid #dcdcdc;
-        background: #e5e5e5;
+        /*border: 1px solid #dcdcdc;*/
+        /*background: #e5e5e5;*/
     }
-    .right-list .list-body .msg-list div.mbMainImg input{
-        width: 100%;
-        height: 100%;
+    .right-list .list-body .msg-list div.mbMainImg img{
+        max-width: 100%;
+        max-height: 100%;
         outline: none;
         opacity: 1;
     }
@@ -386,12 +386,12 @@
         margin-bottom: 34px;
         width: 500px;
         height: 375px;
-        border: 1px solid #dcdcdc;
-        background: #e5e5e5;
+        /*border: 1px solid #dcdcdc;*/
+        /*background: #e5e5e5;*/
     }
-    .right-list .list-body .msg-list div.mbListImg input{
-        width: 100%;
-        height: 100%;
+    .right-list .list-body .msg-list div.mbListImg img{
+        max-width: 100%;
+        max-height: 100%;
         outline: none;
         opacity: 1;
     }
@@ -505,12 +505,12 @@
         margin-left: 5px;
         width: 100px;
         height: 100px;
-        border: 1px solid #dcdcdc;
-        background: #dcdcdc;
+        /*border: 1px solid #dcdcdc;*/
+        /*background: #dcdcdc;*/
     }
-    .right-list .list-body .msg-list div.imgUpload input[type='file']{
-        width: 100%;
-        height: 100%;
+    .right-list .list-body .msg-list div.imgUpload img{
+        max-width: 100%;
+        max-height: 100%;
         opacity: 1;
         outline: none;
     }

+ 6 - 0
donate-service/pom.xml

@@ -54,6 +54,12 @@
             <version>0.0.1-SNAPSHOT</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.uas.account</groupId>
+            <artifactId>sso-core</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>

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

@@ -34,7 +34,7 @@ public class SSOConfiguration extends WebMvcConfigurerAdapter {
          * 拦截器配置
          */
         registry.addInterceptor(ssoInterceptor).addPathPatterns("/**").
-                excludePathPatterns("/WEB-INF/**","/**/static/**", "/sso/login/**", "/sso/logout/**",
+                excludePathPatterns("/WEB-INF/**","/**/static/**", "/sso/**",
                         "/", "/project/**", "/activity/**","/carousels/**", "/message/**",
                         "/org/**", "/projectconclude/**", "/projectevolve/**", "/projectfinance/**",
                         "/projectrecode/**", "/wxpay/**", "/alipay/**", "/mobile/**", "/index", "/activeCenter",

+ 12 - 0
donate-service/src/main/java/com/uas/service/donate/controller/ProjectController.java

@@ -301,4 +301,16 @@ public class ProjectController {
         return new ModelMap("activity", projectService.getJoinedActivity(id));
     }
 
+    /**
+     * 捐款完毕页面注册完毕后,将uu写入捐款记录,并参与相关活动
+     * @param projectRecodeId
+     * @param userUU
+     * @return
+     */
+    @RequestMapping(value = "/joinAfterDonate",method = RequestMethod.POST)
+    @ResponseBody
+    public ModelMap joinAfterDonate(Long projectRecodeId, Long userUU){
+        return  projectService.joinAfterDonate(projectRecodeId, userUU);
+    }
+
 }

+ 23 - 2
donate-service/src/main/java/com/uas/service/donate/controller/SecurityController.java

@@ -39,7 +39,8 @@ public class SecurityController extends CommonController {
      * @return
      */
     @RequestMapping(value = "/account", method = RequestMethod.GET)
-    public ModelMap getAccountInfo() {
+    public ModelMap getAccountInfo(String userUU) {
+        System.out.println(userUU);
         return success(SystemSession.getUser());
     }
 
@@ -213,7 +214,7 @@ public class SecurityController extends CommonController {
      * @return
      * @throws IOException
      */
-    @RequestMapping(value = "/register/page")
+    @RequestMapping(value = "/register/page", method = RequestMethod.GET)
     @ResponseBody
     public ModelMap register(HttpServletRequest request, HttpServletResponse response, String returnUrl) throws IOException {
         request.getSession().setAttribute(SSOConfig.SSOReferer, returnUrl );
@@ -227,4 +228,24 @@ public class SecurityController extends CommonController {
         return new ModelMap("content", redirectUrl);
     }
 
+//    /**
+//     * 获取跳转注册的url(捐款完毕,注册成功之后将uu写入项目参与记录并参与活动)
+//     *
+//     * @return
+//     * @throws IOException
+//     */
+//    @RequestMapping(value = "/register/afterDonate", method = RequestMethod.GET)
+//    @ResponseBody
+//    public ModelMap registerAfterDonate(String returnUrl) throws IOException {
+//        request.getSession().setAttribute(SSOConfig.SSOReferer, returnUrl );
+//        SSOHelper.clearLogin(request, response);
+//        String redirectUrl = null;
+//        if (org.apache.commons.lang3.StringUtils.isEmpty(returnUrl)) {
+//            redirectUrl = SSOHelper.getRedirectRefererRegisterUrl(request);
+//        } else {
+//            redirectUrl = SSOHelper.getRedirectRegisterUrl(request, returnUrl);
+//        }
+//        return new ModelMap("content", redirectUrl);
+//    }
+
 }

+ 8 - 0
donate-service/src/main/java/com/uas/service/donate/service/ProjectService.java

@@ -77,4 +77,12 @@ public interface ProjectService {
      * @return
      */
     Activity getJoinedActivity(Long id);
+
+    /**
+     * 捐款完毕页面注册完毕后,将uu写入捐款记录,并参与相关活动
+     * @param projectRecodeId
+     * @param userUU
+     * @return
+     */
+    ModelMap joinAfterDonate(Long projectRecodeId, Long userUU);
 }

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

@@ -37,6 +37,10 @@ public class ActivityRecodeServiceImpl implements ActivityRecodeService {
 
     //参与活动
     public ActivityRecode join(Long activityId, Long uuid) {
+        ActivityRecode oldRecode = activityRecodeDao.findByActivityIdAndUuid(activityId, uuid);
+        if (null != oldRecode) {
+            return null;
+        }
         ActivityRecode activityRecode = new ActivityRecode();
         activityRecode.setActivityId(activityId);
         activityRecode.setUuid(uuid);
@@ -97,7 +101,7 @@ public class ActivityRecodeServiceImpl implements ActivityRecodeService {
     @Override
     public void joinAfterDonate(Long projectRecordId, Long userUU) {
         ProjectRecode projectRecode = projectRecodeDao.findOne(projectRecordId);
-        if (null != projectRecode) {
+        if (null != projectRecode && null != projectRecode.getUuid()) {
             Activity activity = projectService.getJoinedActivity(projectRecode.getProId());
             join(activity.getId(), userUU);
         }

+ 29 - 0
donate-service/src/main/java/com/uas/service/donate/service/impl/ProjectServiceImpl.java

@@ -10,6 +10,7 @@ import com.uas.service.donate.model.Activity;
 import com.uas.service.donate.model.Project;
 import com.uas.service.donate.model.ProjectRecode;
 import com.uas.service.donate.model.SearchFilter;
+import com.uas.service.donate.service.ActivityRecodeService;
 import com.uas.service.donate.service.ProjectService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
@@ -40,6 +41,9 @@ public class ProjectServiceImpl implements ProjectService {
     @Autowired
     private ActivityDao activityDao;
 
+    @Autowired
+    private ActivityRecodeService activityRecodeService;
+
     //获取所有审核通过,进行中或者已结束的捐款项目
     public Page<Project> findAll(Pageable pageable){
 
@@ -197,6 +201,31 @@ public class ProjectServiceImpl implements ProjectService {
         return !CollectionUtils.isEmpty(activities) ? activities.get(0) : null;
     }
 
+    /**
+     * 捐款完毕页面注册完毕后,将uu写入捐款记录,并参与相关活动
+     * @param projectRecodeId
+     * @param userUU
+     * @return
+     */
+    @Override
+    public ModelMap joinAfterDonate(Long projectRecodeId, Long userUU) {
+        ModelMap map = new ModelMap();
+        ProjectRecode projectRecode = projectRecodeDao.findOne(projectRecodeId);
+        if (null != projectRecode) {
+            if (null != projectRecode.getUuid()) {
+                map.put("success", "记录中已包含userUU!");
+            } else {
+                projectRecode.setUuid(userUU);
+                projectRecodeDao.save(projectRecode);
+                activityRecodeService.joinAfterDonate(projectRecodeId, userUU);
+                map.put("success", "成功记录捐款记录及参与活动!");
+            }
+        } else {
+            map.put("error", "未找到对应捐款记录!");
+        }
+        return map;
+    }
+
 
     //找到某项目的相关项目
     public List<Project> findSimilar(Long id){

+ 1 - 0
donate-service/src/main/resources/dev/account.properties

@@ -6,6 +6,7 @@ sso.cookie.secure=false
 
 # dev
 sso.login.url=http://113.105.74.135:8001/sso/login
+sso.register.url = http://113.105.74.135:8001/sso/register_p
 
 ### account center config,
 account.us.save.url=http://10.10.100.133/api/userspace

+ 2 - 0
donate-service/src/main/resources/prod/account.properties

@@ -7,6 +7,8 @@ sso.cookie.secure=false
 #prod
 sso.cookie.domain=ubtob.com
 sso.login.url=https://account.ubtob.com/sso/login
+sso.register.url=https://account.ubtob.com/sso/register_p
+#sso.register.url=http://wangmh.ubtob.com:8080/sso/register_p
 
 ### account center config,
 account.us.save.url=http://10.10.100.133:8080/api/userspace

+ 1 - 0
donate-service/src/main/resources/test/account.properties

@@ -6,6 +6,7 @@ sso.cookie.secure=false
 
 #test
 sso.login.url=http://113.105.74.135:8001/sso/login
+sso.register.url = http://113.105.74.135:8001/sso/register_p
 
 ### account center config,
 account.us.save.url=http://10.10.100.133/api/userspace

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

@@ -94,6 +94,10 @@ define ([ 'ngResource' ], function() {
             ensureDonate : {
                 url: 'projectrecode/join',
                 method: 'POST'
+            },
+            joinAfterDonate: {
+                url: 'project/joinAfterDonate',
+                method: 'POST'
             }
         });
     }]);

+ 17 - 1
donate-service/src/main/webapp/resources/js/common/services.js

@@ -217,7 +217,7 @@ define([ 'angular', 'common/utils', 'ngResource'], function(angular, utils, Big)
             },
             redirectRegister: function() {
                 // 获取跳转注册的url
-                $http.get(rootPath + '/register/page', {
+                $http.get(rootPath + '/sso/register/page', {
                     params: {
                         returnUrl: window.location.href
                     }
@@ -231,6 +231,22 @@ define([ 'angular', 'common/utils', 'ngResource'], function(angular, utils, Big)
                     alert('系统错误');
                 });
             },
+            // registerAfterDonate: function() {
+            //     // 获取跳转注册的url
+            //     $http.get(rootPath + '/sso/register/page', {
+            //         params: {
+            //             returnUrl: window.location.href
+            //         }
+            //     }).success(function(data) {
+            //         if (data.content) {
+            //             window.location.href = data.content;
+            //         } else {
+            //             alert('系统错误');
+            //         }
+            //     }).error(function() {
+            //         alert('系统错误');
+            //     });
+            // },
 			isAuthed : function() {
 				return SessionService.get('authenticated');
 			},

+ 44 - 2
donate-service/src/main/webapp/resources/js/project/app.js

@@ -44,11 +44,16 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'commo
             templateUrl : 'static/view/project/organization_detail.html',
             controller : 'OrganizationDetailCtrl',
             controllerUrl : 'app/controllers/OrganizationDetailCtrl'
-        })).state("paySucccess", {
+        })).state("paySuccess", {
             url : '/donationsOver/:tradeNo',
             title : '支付完成',
             templateUrl : 'static/view/project/donationsOver.html',
             controller : 'donationsOverCtrl'
+        // }).state("pay_success_after_register", {
+        //     url : '/donationsOver/:tradeNo/: projectRecodeId',
+        //     title : '支付完成页面注册完毕返回页面',
+        //     templateUrl : 'static/view/project/donationsOver.html',
+        //     controller : 'donationsOverCtrl'
         }).state("wxPayQrcode", {
             url : '/donateQrcode/:tradeNo',
             title : '微信扫码',
@@ -66,18 +71,55 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'commo
 	//
 	// }]);
 
-    app.controller('donationsOverCtrl', ['$scope', '$stateParams', '$http', function ($scope, $stateParams, $http) {
+    app.controller('donationsOverCtrl', ['$scope', '$stateParams', '$http', 'AuthenticationService', 'Project', 'SessionService',
+        function ($scope, $stateParams, $http, AuthenticationService, Project, SessionService) {
+
         var loadData = function () {
+            // 捐款记录 projectRecode id
             var tradeNo = $stateParams.tradeNo;
             $http.get('/projectrecode/detail/' + tradeNo, {
             }).success(function (data) {
                 $scope.projectRecode = data;
+                // 参加的活动
+                Project.getJoinedActivity({id: $scope.projectRecode.proId}, {}, function(data) {
+                    $scope.relatedActivity = data.activity;
+                }, function (error) {
+                    console.log(error);
+                });
             }).error(function () {
                 alert("查询支付结果出错");
             });
 
+            // 验证登录
+            AuthenticationService.getAuthentication().success(function(data) {
+                if(data && data.content) {
+                    $scope.user = data.content;
+                }
+                $scope.isAuthed = data !== null && !angular.isUndefined(data.content);
+            });
+
+            var userUU = SessionService.getCookie('userUU');
+            if (!angular.isUndefined(userUU) && null != userUU) {
+                //TODO 注册完毕将userUU放入cookie,在此处获取,进行查询是否已插入对应项目参加记录和参加活动
+                Project.joinAfterDonate({projectRecodeId: tradeNo, userUU: userUU}, {}, function(data) {
+                    if (data.success) {
+                        console.log(data.success);
+                    }
+                    if (data.error) {
+                        console.log(data.error);
+                    }
+                }, function (res) {
+                    console.log(res);
+                });
+                SessionService.removeCookie('userUU');
+            }
         };
         loadData();
+
+        $scope.loginAfterDonate = function() {
+            AuthenticationService.redirectRegister();
+        };
+
     }]);
 
     app.controller('donateQrcodeCtrl', ['$scope', '$stateParams', '$http', function ($scope, $stateParams, $http) {

+ 1 - 1
donate-service/src/main/webapp/resources/js/project/controllers/ProjectDetailCtrl.js

@@ -44,7 +44,7 @@ define([ 'app/app' ], function(app) {
 
             // 参加的活动
             Project.getJoinedActivity({id:id}, {}, function(data) {
-                $scope.activity = data;
+                $scope.activity = data.activity;
             }, function (error) {
                 console.log(error);
             });

+ 7 - 1
donate-service/src/main/webapp/resources/view/project/donationsOver.html

@@ -185,7 +185,13 @@
                     <!--<p>参与活动:</p>-->
                 </div>
             </div>
-            <div class="txt">捐款成功后自动参与<span>【优软一元捐感恩回馈07】</span>活动,将有机会获得丰厚奖品。<a href="">立即查看</a></div>
+            <!-- 有对应的活动,且已登录 -->
+            <div ng-if="isAuthed" class="txt">捐款成功后已自动参与【<a style="margin-left: 0;" href="/activity#/detail/{{relatedActivity.id}}" target="_blank"><span ng-bind="relatedActivity.name"></span></a>】活动,将有机会获得丰厚奖品。<a href="/activity#/detail/{{relatedActivity.id}}" target="_blank">立即查看</a></div>
+            <!--TODO 有对应的活动,未登录,未注册 -->
+            <div ng-if="!isAuthed && !projectRecodeId" class="txt">捐款成功,<span ng-click="loginAfterDonate(projectRecode.id)" style="cursor: pointer;">点此注册</span>之后将自动参与【<a style="margin-left: 0;" href="/activity#/detail/{{relatedActivity.id}}" target="_blank"><span ng-bind="relatedActivity.name"></span></a>】活动,有机会获得丰厚奖品。<a href="/activity#/detail/{{relatedActivity.id}}" target="_blank">立即查看</a></div>
+            <!-- 有对应的活动,注册完毕跳回此页 -->
+            <div ng-if="!isAuthed && projectRecodeId" class="txt">已自动参与【<a style="margin-left: 0;" href="/activity#/detail/{{relatedActivity.id}}" target="_blank"><span ng-bind="relatedActivity.name"></span></a>】活动,有机会获得丰厚奖品。<a href="/activity#/detail/{{relatedActivity.id}}" target="_blank">立即查看</a></div>
+            <!-- 无对应的活动 -->
             <div class="return"><a href="/">返回首页</a></div>
         </div>
     </div>