Browse Source

捐款完毕计入活动总善款;发起项目判断是否有机构,没有跳转机构入驻;添加基本运算工具类。活动开奖加限制。

dongbw 8 years ago
parent
commit
3fb98052ae

+ 1 - 0
donate-console/src/main/java/com/uas/console/donate/WebAppConfiguration.java

@@ -48,6 +48,7 @@ public class WebAppConfiguration extends WebMvcConfigurerAdapter {
 		registry.addViewController("/").setViewName("index");
 		registry.addViewController("/").setViewName("index");
 		registry.addViewController("/index").setViewName("index");
 		registry.addViewController("/index").setViewName("index");
 		registry.addViewController("/userAgreement").setViewName("userAgreement");
 		registry.addViewController("/userAgreement").setViewName("userAgreement");
+		registry.addViewController("/projectProcessInstruction").setViewName("projectProcessInstruction");
 		registry.addViewController("/console").setViewName("console");
 		registry.addViewController("/console").setViewName("console");
 		registry.addViewController("/login/proxy").setViewName("proxyLogin");
 		registry.addViewController("/login/proxy").setViewName("proxyLogin");
 		registry.addViewController("/logout/proxy").setViewName("proxyLogout");
 		registry.addViewController("/logout/proxy").setViewName("proxyLogout");

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

@@ -3,14 +3,17 @@ package com.uas.console.donate.controller;
 import com.uas.dfs.service.FileClient;
 import com.uas.dfs.service.FileClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartFile;
 
 
 import java.io.IOException;
 import java.io.IOException;
+import java.util.Date;
 
 
-@Controller("/base")
+@Controller
+@RequestMapping("/base")
 public class BaseController {
 public class BaseController {
 
 
     @Autowired
     @Autowired
@@ -28,4 +31,14 @@ public class BaseController {
         return path;
         return path;
 
 
     }
     }
+
+    /**
+     * 获取当前服务器时间
+     * @return
+     */
+    @ResponseBody
+    @RequestMapping(value = "/getServeTime", method = RequestMethod.GET)
+    public ModelMap getServeTime() {
+        return new ModelMap("serveTime", new Date());
+    }
 }
 }

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

@@ -171,28 +171,28 @@ public class ProjectController {
         return projectService.submit(project);
         return projectService.submit(project);
     }
     }
 
 
-    /**
-     * 取出某项目的,以及该项目对应机构的具体信息
-     * @param id
-     * @return
-     */
-    @ResponseBody
-    @RequestMapping("/detail/{id}")
-    public List<Object> detail(@PathVariable("id") Long id){
-        Org org=projectService.findOrgInfo(id);
-        Project project=projectService.findOne(id);
-        //项目进度
-
-        //捐款信息
-        List<ProjectRecode> projectRecodeList=projectRecodeService.findProjectDetail(id);
-        //财务披露
-
-        List<Object> list=new ArrayList<>();
-        list.add(org);
-        list.add(project);
-        list.add(projectRecodeList);
-        return list;
-    }
+//    /**
+//     * 取出某项目的,以及该项目对应机构的具体信息
+//     * @param id
+//     * @return
+//     */
+//    @ResponseBody
+//    @RequestMapping("/detail/{id}")
+//    public List<Object> detail(@PathVariable("id") Long id){
+//        Org org=projectService.findOrgInfo(id);
+//        Project project=projectService.findOne(id);
+//        //项目进度
+//
+//        //捐款信息
+//        List<ProjectRecode> projectRecodeList=projectRecodeService.findProjectDetail(id);
+//        //财务披露
+//
+//        List<Object> list=new ArrayList<>();
+//        list.add(org);
+//        list.add(project);
+//        list.add(projectRecodeList);
+//        return list;
+//    }
 
 
     /**
     /**
      *项目列表搜索框查询
      *项目列表搜索框查询
@@ -267,7 +267,7 @@ public class ProjectController {
 
 
     /**
     /**
      * 获取项目详情
      * 获取项目详情
-     * @param id
+     * @param id 项目id
      * @return
      * @return
      */
      */
     @RequestMapping(value = "/detail/{id}", method = RequestMethod.GET)
     @RequestMapping(value = "/detail/{id}", method = RequestMethod.GET)

+ 12 - 0
donate-console/src/main/java/com/uas/console/donate/controller/UserController.java

@@ -11,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Controller;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
 import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.ResponseBody;
@@ -41,6 +42,17 @@ public class UserController extends CommonController {
         return userService.findAll();
         return userService.findAll();
     }
     }
 
 
+    /**
+     * 获取单个用户信息
+     * @param userUU 用户UU
+     * @return 用户信息实体
+     */
+    @ResponseBody
+    @RequestMapping(value = "/detail/{userUU}", method = RequestMethod.GET)
+    public User getDetailByUserUU(@PathVariable("userUU") Long userUU) {
+        return userService.findOne(userUU);
+    }
+
     /**
     /**
      * 获取用户列表 (全部)
      * 获取用户列表 (全部)
      * @param params 分页参数
      * @param params 分页参数

+ 25 - 33
donate-console/src/main/java/com/uas/console/donate/model/Activity.java

@@ -7,7 +7,6 @@ import com.uas.console.donate.util.CollectionUtils;
 
 
 import javax.persistence.*;
 import javax.persistence.*;
 import java.io.Serializable;
 import java.io.Serializable;
-import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.Date;
 import java.util.Set;
 import java.util.Set;
@@ -21,7 +20,6 @@ import java.util.Set;
 public class Activity implements Serializable{
 public class Activity implements Serializable{
 
 
     private static final long serialVersionUID = 1L;
     private static final long serialVersionUID = 1L;
-    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 
 
     /**
     /**
      * id
      * id
@@ -185,7 +183,7 @@ public class Activity implements Serializable{
     private Set<Project> projects;
     private Set<Project> projects;
 
 
     /**
     /**
-     * 奖品总数
+     * 奖品总数(现用于后台显示)
      */
      */
     @Transient
     @Transient
     private Integer awardAmount;
     private Integer awardAmount;
@@ -194,7 +192,7 @@ public class Activity implements Serializable{
      * 已筹集善款
      * 已筹集善款
      * @return
      * @return
      */
      */
-    @Transient
+    @Column(name = "act_amount")
     private Double amount;
     private Double amount;
 
 
     /**
     /**
@@ -235,45 +233,40 @@ public class Activity implements Serializable{
         this.summary = summary;
         this.summary = summary;
     }
     }
 
 
-    public String getStartTime() {
-        Date date=this.startTime;
-        return date!=null?sdf.format(this.startTime):null;
+    public Date getStartTime() {
+        return this.startTime;
     }
     }
 
 
     public void setStartTime(Date startTime) {
     public void setStartTime(Date startTime) {
         this.startTime = startTime;
         this.startTime = startTime;
     }
     }
 
 
-    public String getEndTime() {
-        Date date=this.endTime;
-        return date!=null?sdf.format(this.endTime):null;
+    public Date getEndTime() {
+        return this.endTime;
     }
     }
 
 
     public void setEndTime(Date endTime) {
     public void setEndTime(Date endTime) {
         this.endTime = endTime;
         this.endTime = endTime;
     }
     }
 
 
-    public String getLuckyTime() {
-        Date date=this.luckyTime;
-        return date!=null?sdf.format(this.luckyTime):null;
+    public Date getLuckyTime() {
+        return this.luckyTime;
     }
     }
 
 
     public void setLuckyTime(Date luckyTime) {
     public void setLuckyTime(Date luckyTime) {
         this.luckyTime = luckyTime;
         this.luckyTime = luckyTime;
     }
     }
 
 
-    public String getReceiveStartTime() {
-        Date date=this.receiveStartTime;
-        return date!=null?sdf.format(this.receiveStartTime):null;
+    public Date getReceiveStartTime() {
+        return this.receiveStartTime;
     }
     }
 
 
     public void setReceiveStartTime(Date receiveStartTime) {
     public void setReceiveStartTime(Date receiveStartTime) {
         this.receiveStartTime = receiveStartTime;
         this.receiveStartTime = receiveStartTime;
     }
     }
 
 
-    public String getReceiveEndTime() {
-        Date date=this.receiveEndTime;
-        return date!=null?sdf.format(this.receiveEndTime):null;
+    public Date getReceiveEndTime() {
+        return this.receiveEndTime;
     }
     }
 
 
     public void setReceiveEndTime(Date receiveEndTime) {
     public void setReceiveEndTime(Date receiveEndTime) {
@@ -288,9 +281,8 @@ public class Activity implements Serializable{
         this.person = person;
         this.person = person;
     }
     }
 
 
-    public String getSubmitTime() {
-        Date date=this.submitTime;
-        return date!=null?sdf.format(this.submitTime):null;
+    public Date getSubmitTime() {
+        return this.submitTime;
     }
     }
 
 
     public void setSubmitTime(Date submitTime) {
     public void setSubmitTime(Date submitTime) {
@@ -473,18 +465,18 @@ public class Activity implements Serializable{
     }
     }
 
 
     public Double getAmount() {
     public Double getAmount() {
-        if (null != amount) {
+//        if (null != amount) {
             return amount;
             return amount;
-        }
-        Double totalAmount = 0d;
-        if (!CollectionUtils.isEmpty(this.getProjects())) {
-            for (Project project : this.getProjects()) {
-                if (null != project.getTotalAmount()) {
-                    totalAmount += project.getTotalAmount();
-                }
-            }
-        }
-        return totalAmount;
+//        }
+//        Double totalAmount = 0d;
+//        if (!CollectionUtils.isEmpty(this.getProjects())) {
+//            for (Project project : this.getProjects()) {
+//                if (null != project.getTotalAmount()) {
+//                    totalAmount += project.getTotalAmount();
+//                }
+//            }
+//        }
+//        return totalAmount;
     }
     }
 
 
     public void setAmount(Double amount) {
     public void setAmount(Double amount) {

+ 4 - 0
donate-console/src/main/java/com/uas/console/donate/model/Project.java

@@ -1,6 +1,9 @@
 package com.uas.console.donate.model;
 package com.uas.console.donate.model;
 
 
 
 
+import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
 import javax.persistence.*;
 import javax.persistence.*;
 import java.io.Serializable;
 import java.io.Serializable;
 import java.text.SimpleDateFormat;
 import java.text.SimpleDateFormat;
@@ -603,4 +606,5 @@ public class Project implements Serializable{
     public void setEnd(Short end) {
     public void setEnd(Short end) {
         this.end = end;
         this.end = end;
     }
     }
+
 }
 }

+ 36 - 30
donate-console/src/main/java/com/uas/console/donate/service/impl/ProjectServiceImpl.java

@@ -6,6 +6,7 @@ import com.uas.console.donate.dao.*;
 import com.uas.console.donate.model.*;
 import com.uas.console.donate.model.*;
 import com.uas.console.donate.service.ProjectService;
 import com.uas.console.donate.service.ProjectService;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.persistence.UserUU;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Page;
@@ -41,12 +42,15 @@ public class ProjectServiceImpl implements ProjectService {
     @Autowired
     @Autowired
     private ProjectConcludeDao projectConcludeDao;
     private ProjectConcludeDao projectConcludeDao;
 
 
+    @Autowired
+    private UserDao userDao;
+
     //项目发起,有草稿则取出草稿
     //项目发起,有草稿则取出草稿
     @Override
     @Override
     public Project show(){
     public Project show(){
-        if(projectDao.getDraft()==null){
+        if (projectDao.getDraft() == null){
             return null;
             return null;
-        }else{
+        } else {
             return projectDao.getDraft();
             return projectDao.getDraft();
         }
         }
     }
     }
@@ -54,42 +58,44 @@ public class ProjectServiceImpl implements ProjectService {
     //保存项目草稿
     //保存项目草稿
     @Override
     @Override
     public Project save(Project project){
     public Project save(Project project){
-        //TODO 登录session获取机构id
-        project.setOrgId(15L);
-        if(project.getOrgId()!=null){
-            Org org= orgDao.findOne(project.getOrgId());
-            //得到机构名
-            String orgName=org.getName();
-            project.setOrgName(orgName);
-        }
-        if(project.getPublish()==null||project.getPublish()==1){
-            project.setPublish(1);
+        //session获取机构id
+        if (null != SystemSession.getUser().getUserUU()) {
+            User user = userDao.findOne(SystemSession.getUser().getUserUU());
+            if (null == user.getOrg()) {
+                throw new IllegalArgumentException("该用户不属于任何机构,无法发布项目");
+            }
+            project.setOrgId(user.getOrg().getId());
+            project.setOrgName(user.getOrg().getName());
+            if (project.getPublish() == null || project.getPublish() == 1){
+                project.setPublish(1);
+            }
+            project.setEnd((short) 0);
+            project = projectDao.save(project);
+            return project;
         }
         }
-        project.setEnd((short) 0);
-        project = projectDao.save(project);
-        return project;
+        return null;
     }
     }
 
 
     //提交项目
     //提交项目
     @Override
     @Override
     public Project submit(Project project) {
     public Project submit(Project project) {
-        //TODO 登录session获取机构id
-        project.setOrgId(15L);
-        if(project.getOrgId()!=null){
-            Org org= orgDao.findOne(project.getOrgId());
-            //得到机构名
-            String orgName=org.getName();
-            project.setOrgName(orgName);
-        }
-
-        //正式发布
-        project.setPublish(2);
-        //设置未审核状态
-        project.setStatus(0);
+        if (null != SystemSession.getUser().getUserUU()) {
+            User user = userDao.findOne(SystemSession.getUser().getUserUU());
+            if (null == user.getOrg()) {
+                throw new IllegalArgumentException("该用户不属于任何机构,无法发布项目");
+            }
+            project.setOrgId(user.getOrg().getId());
+            project.setOrgName(user.getOrg().getName());
+            //正式发布
+            project.setPublish(2);
+            //设置未审核状态
+            project.setStatus(0);
 
 
-        project.setEnd((short) 0);
+            project.setEnd((short) 0);
 
 
-        return projectDao.save(project);
+            return projectDao.save(project);
+        }
+        return null;
     }
     }
 
 
     //取出某项目的机构信息
     //取出某项目的机构信息

+ 70 - 0
donate-console/src/main/java/com/uas/console/donate/util/BigDecimalUtils.java

@@ -0,0 +1,70 @@
+package com.uas.console.donate.util;
+
+
+import java.math.BigDecimal;
+
+/**
+ * BigDecimal 基本运算
+ * Created by dongbw
+ * 17/12/28 11:39.
+ */
+public class BigDecimalUtils {
+
+    /**
+     * 保留小数位数
+     */
+    static final Integer NEW_SCALE = 2;
+
+    /**
+     * 加法
+     * @param v1 double数字
+     * @param v2 double数字
+     * @return
+     */
+    public static Double add(Double v1, Double v2) {
+        BigDecimal b1 = new BigDecimal(v1.toString());
+        BigDecimal b2 = new BigDecimal(v2.toString());
+        return b1.add(b2).setScale(NEW_SCALE, BigDecimal.ROUND_HALF_UP).doubleValue();
+    }
+
+    /**
+     * 减法
+     * @param v1 double数字
+     * @param v2 double数字
+     * @return
+     */
+    public static Double substract(Double v1, Double v2) {
+        BigDecimal b1 = new BigDecimal(v1.toString());
+        BigDecimal b2 = new BigDecimal(v2.toString());
+        return b1.subtract(b2).setScale(NEW_SCALE, BigDecimal.ROUND_HALF_UP).doubleValue();
+    }
+
+    /**
+     * 乘法
+     * @param v1 double数字
+     * @param v2 double数字
+     * @return
+     */
+    public static Double multiply(Double v1, Double v2) {
+        BigDecimal b1 = new BigDecimal(v1.toString());
+        BigDecimal b2 = new BigDecimal(v2.toString());
+        return b1.multiply(b2).setScale(NEW_SCALE, BigDecimal.ROUND_HALF_UP).doubleValue();
+    }
+
+    /**
+     * 除法
+     * @param v1 double数字
+     * @param v2 double数字
+     * @return
+     */
+    public static Double divide(Double v1, Double v2) {
+        if (v2 == 0) {
+            //如果除数为0,抛出异常信息。
+            throw new IllegalArgumentException("除数不能为0");
+        }
+        BigDecimal b1 = new BigDecimal(v1.toString());
+        BigDecimal b2 = new BigDecimal(v2.toString());
+        return b1.divide(b2, 2).setScale(NEW_SCALE, BigDecimal.ROUND_HALF_UP).doubleValue();
+    }
+
+}

+ 2 - 2
donate-console/src/main/webapp/WEB-INF/views/index.html

@@ -61,7 +61,7 @@
         </nav>
         </nav>
     </header>
     </header>
     <!--左侧边栏-->
     <!--左侧边栏-->
-    <aside class="main-sidebar">
+    <aside class="main-sidebar" ng-controller="LeftSideCtrl">
         <section class="sidebar">
         <section class="sidebar">
             <ul class="sidebar-menu">
             <ul class="sidebar-menu">
                 <li class="jpress_block"></li>
                 <li class="jpress_block"></li>
@@ -80,7 +80,7 @@
                     </a>
                     </a>
                     <ul class="treeview-menu">
                     <ul class="treeview-menu">
                         <li ng-class="{'active' : thief == 'list'}"><a ui-sref="project">项目列表</a></li>
                         <li ng-class="{'active' : thief == 'list'}"><a ui-sref="project">项目列表</a></li>
-                        <li ng-class="{'active' : thief == 'new'}"><a ui-sref="launchProject1">发起项目</a></li>
+                        <li ng-class="{'active' : thief == 'new'}"><a ng-click="launchProject()">发起项目</a></li>
                         <li ng-class="{'active' : thief == 'finance'}"><a ui-sref="projectFinance">项目财务披露</a></li>
                         <li ng-class="{'active' : thief == 'finance'}"><a ui-sref="projectFinance">项目财务披露</a></li>
                         <li ng-class="{'active' : thief == 'report'}"><a ui-sref="projectReport">项目报告填写</a></li>
                         <li ng-class="{'active' : thief == 'report'}"><a ui-sref="projectReport">项目报告填写</a></li>
                         <li ng-class="{'active' : thief == 'manage'}"><a ui-sref="projectManagement">项目结项管理</a></li>
                         <li ng-class="{'active' : thief == 'manage'}"><a ui-sref="projectManagement">项目结项管理</a></li>

+ 270 - 0
donate-console/src/main/webapp/WEB-INF/views/projectProcessInstruction.html

@@ -0,0 +1,270 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <title>流程说明-一元捐</title>
+    <meta name="keywords" content="">
+    <meta name="description" content="">
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <meta name="renderer" content="webkit">
+    <!--css begin-->
+    <link href="static/images/icon/u.png" rel="icon" type="image/x-icon" />
+    <link rel="stylesheet" href="static/lib/bootstrap/css/bootstrap.min.css">
+    <link rel="stylesheet" href="static/css/base.css">
+    <style>
+        body{
+            font-family: "Microsoft Yahei", "微软雅黑";
+            box-sizing: border-box;
+        }
+        .fl{
+            float: left;
+        }
+        .fr{
+            float: right;
+        }
+        .clearfix {
+            clear: both;
+        }
+        /*头部导航*/
+        #nav{
+            width: 100%;
+            margin: 0 auto;
+            background: #474443;
+        }
+        #nav .container{
+            margin: 0 auto;
+            padding: 0;
+            width: 1140px;
+            height: 60px;
+            line-height: 60px;
+            text-align: center;
+        }
+        #nav .fl{
+            position: relative;
+        }
+        #nav .fl img{
+            margin-right: 32px;
+            width: 65px;
+            height: 22px;
+        }
+        #nav .fl span{
+            font-size: 16px;
+            color: #fff;
+        }
+        #nav .fl span:before{
+            content: '';
+            position: absolute;
+            top: 25px;
+            left: 80px;
+            width: 1px;
+            height: 14px;
+            background: #a0a0a0;
+        }
+        #nav .fl a.return{
+            margin-left: 28px;
+            font-size: 12px;
+            color: #b4b4b4;
+            text-decoration: none;
+        }
+        #nav .fr a{
+            margin-right: 45px;
+            font-size: 14px;
+            color: #fff;
+        }
+        #nav .fr a:last-child {
+            margin-right: 0;
+        }
+        .main{
+            width: 100%;
+            margin: 24px 0 110px 0;
+        }
+        .main .container{
+            width: 1140px;
+            margin: 0 auto;
+            padding: 0;
+        }
+        .main .section{
+            width: 100%;
+            overflow: hidden;
+            text-align: center;
+            margin: 0 auto;
+        }
+        .section1 .nav{
+            margin-bottom: 15px;
+            padding-bottom: 10px;
+            width: 100%;
+            text-align: left;
+            border-bottom: 2px solid #ef613b;
+        }
+        .section1 .nav span:first-child a{
+            font-size: 14px;
+            color: #303030;
+        }
+        .section1 .nav span:nth-child(2){
+            margin: 0 10px;
+        }
+        .section1 .nav span:last-child{
+            font-size: 30px;
+            color: #303030;
+        }
+        .section1 .progress-card{
+            margin: 30px 0 48px 0;
+            width: 100%;
+            overflow: hidden;
+        }
+        .section1 .progress-card .card-list{
+            float: left;
+            margin-right: 24px;
+            padding: 0 35px;
+            width: 170px;
+            height: 170px;
+            text-align: center;
+            border: 1px solid #dcdcdc;
+        }
+        .section1 .progress-card .card-list:last-child{
+            margin-right: 0;
+        }
+        .section1 .progress-card .card-list .card-top{
+            height: 60px;
+            line-height: 60px;
+            font-size: 30px;
+            color: #b4b4b4;
+            width: 100%;
+            border-bottom: 1px solid #e1e1e1;
+        }
+        .section1 .progress-card .card-list .card-bottom{
+            text-align: left;
+        }
+        .section1 .progress-card .card-list .card-bottom p{
+            height: 56px;
+            line-height: 56px;
+            text-align: center;
+            font-size: 24px;
+            color: #ef613b;
+        }
+        .section1 .progress-card .card-list .card-bottom span{
+            text-align: left;
+            font-size: 12px;
+            color: #787878;
+        }
+        .section2 .txt-item{
+            margin-bottom: 60px;
+            width: 100%;
+            text-align: left;
+        }
+        .section2 .txt-item:last-child{
+            margin-bottom: 0;
+        }
+        .section2 .txt-item h3{
+            padding-bottom: 15px;
+            font-size: 18px;
+            color: #1e1e1e;
+            border-bottom: 1px solid #dcdcdc;
+        }
+        .section2 .txt-item p{
+            margin-top: 15px;
+            font-size: 14px;
+            color: #787878;
+        }
+    </style>
+</head>
+<body>
+<!--<div id="nav">
+    <div class="container clearfix">
+        <div class="fl"><a href="http://www.ubtob.com" title="优软云首页"><img src="static/images/uas.png" alt=""/></a><span><a href="/" title="返回首页" style="color: #fff;">一元捐</a></span></div>
+        <div class="fr"><a href="">登录</a><a href="">注册</a><a href="http://www.ubtob.com">进入优软云</a></div>
+    </div>
+</div>-->
+<div class="main">
+    <div class="container">
+        <div class="section section1">
+            <div class="nav">
+                <span><a href="/">首页</a></span><span>&gt;</span><span>项目发起流程说明</span>
+            </div>
+            <div class="progress-card">
+                <div class="card-list">
+                    <div class="card-top">1</div>
+                    <div class="card-bottom">
+                        <p>注册</p>
+                        <span>个人进行实名认证机构完成机构注册</span>
+                    </div>
+                </div>
+                <div class="card-list">
+                    <div class="card-top">2</div>
+                    <div class="card-bottom">
+                        <p>发起</p>
+                        <span>在线提交项目图文内容</span>
+                    </div>
+                </div>
+                <div class="card-list">
+                    <div class="card-top">3</div>
+                    <div class="card-bottom">
+                        <p>审核</p>
+                        <span>公募机构审核并确认项目</span>
+                    </div>
+                </div>
+                <div class="card-list">
+                    <div class="card-top">4</div>
+                    <div class="card-bottom">
+                        <p>募款</p>
+                        <span>在线接收公众捐款</span>
+                    </div>
+                </div>
+                <div class="card-list">
+                    <div class="card-top">5</div>
+                    <div class="card-bottom">
+                        <p>执行</p>
+                        <span>按公布方案执行并发布项目进展</span>
+                    </div>
+                </div>
+                <div class="card-list">
+                    <div class="card-top">6</div>
+                    <div class="card-bottom">
+                        <p>结项</p>
+                        <span>项目执行完成后在线提交结项报告</span>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div class="section section2">
+            <div class="txt-item">
+                <h3>1、注册</h3>
+                <p>1.1、如果您想发起项目,请点击首页的“发起项目”按钮,进入认证注册页面。</p>
+                <p>1.2、目前暂只允许非公募或公募机构发起项目,请点击相对应的“注册”,然后根据提示完成注册。</p>
+                <p>1.3、机构注册的审核时间分为5个工作日。</p>
+            </div>
+            <div class="txt-item">
+                <h3>2、发起</h3>
+                <p>2.1、完成注册后,即可发起项目,根据提示填写项目资料。</p>
+                <p>2.2、成功提交项目申请后,请耐心等待,10个工作日内返回您的审核结果。</p>
+            </div>
+            <div class="txt-item">
+                <h3>3、审核</h3>
+                <p>3.1、公募机构发布的项目,在确认图文无错误后,直接进入募款阶段。</p>
+                <p>3.2、非公募机构发布的项目,在经公募机构审核项目的真实性、项目设计和可执行性等后,确认是否支持。</p>
+            </div>
+            <div class="txt-item">
+                <h3>4、募款</h3>
+                <p>4.1、募款期间,项目执行方如果开始执行项目,可以更新项目进展。</p>
+                <p>4.2、非公募机构发布的项目,在募款完成后,执行方须填写由所支持的公募机构提供的项目协议。公募机构在收到执行方寄回的项目协议后,在其公示的时间内向发起方拨款(如中国扶贫基金会人人公益基金的拨款时间为收到协议的5个工作日内)。</p>
+            </div>
+            <div class="txt-item">
+                <h3>5、执行</h3>
+                <p>5.1、项目完成募款目标后,将自动进入公益机构执行阶段。</p>
+                <p>5.2、项目完成募款后,由项目执行方按照公示的项目方案进行执行,并及时更新项目进展。</p>
+            </div>
+            <div class="txt-item">
+                <h3>6、结项</h3>
+                <p>6.1、项目执行结束后,由发起方、执行方和公募机构负责提供项目结项报告,面对所有爱心用户反馈款项使用细节和执行结果,进行结项汇报。此过程对所有爱心用户全程公开,接收爱心用户的监督。</p>
+            </div>
+        </div>
+    </div>
+</div>
+<!--js begin-->
+<script src="static/lib/jquery/jquery.min.js"></script>
+<script src="static/lib/bootstrap/js/bootstrap.min.js"></script>
+<script>
+</script>
+</body>
+</html>

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

@@ -1,6 +1,7 @@
 define([ 'angular', 'common/utils', 'ngResource'], function(angular, utils, Big) {
 define([ 'angular', 'common/utils', 'ngResource'], function(angular, utils, Big) {
 	'use strict';
 	'use strict';
-	angular.module('common.services', [ 'common.utils', 'ngResource' ]).factory('FlashService', ['$rootScope', function($rootScope) {
+	angular.module('common.services', [ 'common.utils', 'ngResource' ])
+		.factory('FlashService', ['$rootScope', function($rootScope) {
 		return {
 		return {
 			show : function(message) {
 			show : function(message) {
 				$rootScope.flashMessage = message;
 				$rootScope.flashMessage = message;
@@ -63,7 +64,7 @@ define([ 'angular', 'common/utils', 'ngResource'], function(angular, utils, Big)
 				}
 				}
 			}
 			}
 		};
 		};
-	}).factory('BaseService', ['$rootScope', function($rootScope) {
+	}).factory('BaseService', [ '$rootScope', function( $rootScope) {
 		return {
 		return {
             getRootPath: function() {
             getRootPath: function() {
             	var pathName = window.location.pathname.substring(1);
             	var pathName = window.location.pathname.substring(1);

+ 41 - 13
donate-console/src/main/webapp/resources/js/index/app.js

@@ -2,9 +2,9 @@
  * index
  * index
  *
  *
  */
  */
-define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-upload', 'common/directives', 'common/services', 'toaster', 'ngSanitize', 'services/Project', 'services/Activity', 'services/Organization', 'ui-form', 'services/User', 'services/Message'], function(angularAMD) {
+define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-upload', 'common/directives', 'common/services', 'toaster', 'ngSanitize', 'services/Project', 'services/Activity', 'services/Organization', 'ui-form', 'services/User', 'services/Message', 'services/Public'], function(angularAMD) {
 	'use strict';
 	'use strict';
-	var app = angular.module('myApp', [ 'ui.router', 'ui.bootstrap', 'ng.local', 'ngTable', 'angularFileUpload', 'common.directives', 'common.services', 'toaster', 'ngSanitize', 'ProjectService', 'ActivityService', 'OrganizationService', 'ui.form', 'UserService', 'MessageService']);
+	var app = angular.module('myApp', [ 'ui.router', 'ui.bootstrap', 'ng.local', 'ngTable', 'angularFileUpload', 'common.directives', 'common.services', 'toaster', 'ngSanitize', 'ProjectService', 'ActivityService', 'OrganizationService', 'ui.form', 'UserService', 'MessageService', 'PublicService']);
         app.init = function() {
         app.init = function() {
 		angularAMD.bootstrap(app);
 		angularAMD.bootstrap(app);
 	};
 	};
@@ -228,6 +228,29 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
         };
         };
     }]);
     }]);
 
 
+    app.controller('LeftSideCtrl', ['$scope', 'AuthenticationService', 'User', function ($scope, AuthenticationService, User) {
+
+        // 如果当前用户无机构信息,进入机构入驻页面
+        // 获取已登录的用户信息
+        $scope.launchProject = function() {
+            AuthenticationService.getAuthentication().success(function(data) {
+                if(data && data.content) {
+                    $scope.userInfo = data.content;
+                    User.getDetailByUserUU({userUU: $scope.userInfo.userUU}, {}, function(data) {
+                        $scope.userInfo = data;
+                        // 如果未登录,跳转到机构入驻
+                        if (angular.isUndefined($scope.userInfo.org)) {
+                            window.location.hash = '#/selectInstitutionsNature';
+                        } else {
+                            window.location.hash = '#/launchProject/baseInfo';
+                        }
+                    });
+                }
+                // $scope.isAuthed = data !== null && !angular.isUndefined(data.content);
+            });
+        }
+    }]);
+
     /**
     /**
      * 项目列表
      * 项目列表
      */
      */
@@ -407,13 +430,6 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
         };
         };
 
 
         // 获取当前项目捐款明细
         // 获取当前项目捐款明细
-        // $scope.getRecords = function() {
-        //     Project.getRecords({proId:id}, {}, function(data) {
-        //         $scope.projectRecords = data;
-        //     }, function() {
-        //         toaster.pop('error', '捐款明细加载失败');
-        //     });
-        // };
         $scope.recordParams = new ngTableParams({
         $scope.recordParams = new ngTableParams({
             page: 1,
             page: 1,
             count: 5,
             count: 5,
@@ -1432,8 +1448,8 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
     /**
     /**
      * 新建项目
      * 新建项目
      */
      */
-    app.controller('ProjectNewCtrl', ['$scope', 'BaseService', 'Project', '$http', 'toaster', '$stateParams', '$rootScope',
-        function($scope, BaseService, Project, $http, toaster, $stateParams, $rootScope) {
+    app.controller('ProjectNewCtrl', ['$scope', 'BaseService', 'Project', '$http', 'toaster', '$stateParams', '$rootScope', 'AuthenticationService', 'User',
+        function($scope, BaseService, Project, $http, toaster, $stateParams, $rootScope, AuthenticationService, User) {
         $scope.loading = true;
         $scope.loading = true;
         BaseService.scrollBackToTop();
         BaseService.scrollBackToTop();
         $rootScope.tree = 'project';
         $rootScope.tree = 'project';
@@ -2224,12 +2240,24 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
     /**
     /**
      * 活动列表
      * 活动列表
      */
      */
-    app.controller('ActivityListCtrl', ['$scope', '$rootScope', 'toaster', 'ngTableParams', 'BaseService', 'Activity', '$modal',
-        function ($scope, $rootScope, toaster, ngTableParams, BaseService, Activity, $modal) {
+    app.controller('ActivityListCtrl', ['$scope', '$rootScope', 'toaster', 'ngTableParams', 'BaseService', 'Activity', '$modal', 'Public',
+        function ($scope, $rootScope, toaster, ngTableParams, BaseService, Activity, $modal, Public) {
             BaseService.scrollBackToTop();
             BaseService.scrollBackToTop();
             $rootScope.tree = 'activity';
             $rootScope.tree = 'activity';
             $rootScope.thief = 'list';
             $rootScope.thief = 'list';
 
 
+            // 获取当前服务器时间(前端时间从本机获取,可能不准确,所以从服务器返回当前时间)
+            var getServeTime = function() {
+               Public.getServeTime({}, function(data) {
+                   if (data.serveTime) {
+                       $scope.serveTime = data.serveTime;
+                   }
+               }, function() {
+                   console.log('获取服务器时间失败!');
+               });
+            };
+            getServeTime();
+
             var getActivityState = function (active) {
             var getActivityState = function (active) {
                 // 正在进行
                 // 正在进行
                 var fn = 'getDone';
                 var fn = 'getDone';

+ 12 - 0
donate-console/src/main/webapp/resources/js/index/services/Public.js

@@ -0,0 +1,12 @@
+define ([ 'ngResource' ], function() {
+    angular.module('PublicService', ['ngResource'])
+        .factory('Public', ['$resource', function ($resource) {
+            return $resource ('base', {}, {
+                // 获取系统时间
+                getServeTime: {
+                    url: 'base/getServeTime',
+                    method: 'GET'
+                }
+            });
+        }]);
+});

+ 23 - 5
donate-console/src/main/webapp/resources/view/activity/activity_list.html

@@ -822,28 +822,46 @@
                             <td width="110">相关项目</td>
                             <td width="110">相关项目</td>
                             <td width="150">开始时间</td>
                             <td width="150">开始时间</td>
                             <td width="150">开奖时间</td>
                             <td width="150">开奖时间</td>
+                            <td width="160">兑奖开始时间</td>
+                            <td width="160">兑奖结束时间</td>
                             <td width="150" ng-if="active == 'end'">截止时间</td>
                             <td width="150" ng-if="active == 'end'">截止时间</td>
                             <td width="110">参与人数</td>
                             <td width="110">参与人数</td>
                             <td width="110" ng-if="active == 'end'">中奖人数</td>
                             <td width="110" ng-if="active == 'end'">中奖人数</td>
                             <td width="110" ng-if="active == 'end'">领奖人数</td>
                             <td width="110" ng-if="active == 'end'">领奖人数</td>
-                            <td width="110" ng-if="active != 'waiting'">已筹善款</td>
+                            <td width="160" ng-if="active != 'waiting'">已筹善款</td>
                             <td width="110">发布人</td>
                             <td width="110">发布人</td>
-                            <td width="400"></td>
+                            <td width="60"></td>
                         </tr>
                         </tr>
                         </thead>
                         </thead>
-                        <tbody ng-repeat="activity in $data">
+                        <tbody ng-if="activityParams.total() == 0">
                         <tr>
                         <tr>
+                            <td colspan="14">
+                                <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="activity in $data">
+                        <tr ng-click="showDetail(activity.id)" title="查看详情">
                             <!--<td><input type="checkbox"></td>-->
                             <!--<td><input type="checkbox"></td>-->
                             <td></td>
                             <td></td>
                             <td>
                             <td>
                                 <div class="name clearfix">
                                 <div class="name clearfix">
-                                    <p class="fl" ng-click="showDetail(activity.id)" title="查看详情">{{activity.name}}</p>
-                                    <div class="fl" ng-if="active == 'done'"><a ng-click="openAward(activity.id)" class="open-award">开奖</a></div>
+                                    <p class="fl">{{activity.name}}</p>
+                                    <div class="fl" ng-if="active == 'done'"><a ng-if="serveTime >= activity.receiveStartTime && serveTime < activity.receiveEndTime " ng-click="openAward(activity.id)" class="open-award">开奖</a></div>
                                 </div>
                                 </div>
                             </td>
                             </td>
                             <td>{{activity.sumconnect || 0}}</td>
                             <td>{{activity.sumconnect || 0}}</td>
                             <td>{{activity.startTime || '无' | date :'yyyy-MM-dd'}}</td>
                             <td>{{activity.startTime || '无' | date :'yyyy-MM-dd'}}</td>
                             <td>{{activity.luckyTime || '无' | date :'yyyy-MM-dd'}}</td>
                             <td>{{activity.luckyTime || '无' | date :'yyyy-MM-dd'}}</td>
+                            <td>{{activity.receiveStartTime || '无' | date :'yyyy-MM-dd'}}</td>
+                            <td>{{activity.receiveEndTime || '无' | date :'yyyy-MM-dd'}}</td>
                             <td ng-if="active == 'end'">{{activity.endTime || '无' | date :'yyyy-MM-dd'}}</td>
                             <td ng-if="active == 'end'">{{activity.endTime || '无' | date :'yyyy-MM-dd'}}</td>
                             <td>{{activity.joinedPerson || 0 | number}}人</td>
                             <td>{{activity.joinedPerson || 0 | number}}人</td>
                             <td ng-if="active == 'end'">{{activity.luckyPerson || 0 | number}}人</td>
                             <td ng-if="active == 'end'">{{activity.luckyPerson || 0 | number}}人</td>

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

@@ -775,15 +775,18 @@
                             </tr>
                             </tr>
                             </thead>
                             </thead>
                             <tbody ng-if="tableParams.total() == 0">
                             <tbody ng-if="tableParams.total() == 0">
-                                <tr>
-                                    <td>
-                                        <div class="row text-muted info-container" style="padding: 50px 10px;">
-                                            <div class="col-md-4 text-center">
-                                                <div class="f16">当前没有找到符合条件的项目!</div>
-                                            </div>
+                            <tr>
+                                <td colspan="10">
+                                    <div class="section noSearch">
+                                        <div class="img">
+                                            <img src="static/images/noSearch.png" alt=""/>
+                                        </div>
+                                        <div class="txt">
+                                            <p>未找到任何记录</p>
                                         </div>
                                         </div>
-                                    </td>
-                                </tr>
+                                    </div>
+                                </td>
+                            </tr>
                             </tbody>
                             </tbody>
                             <!--<tbody>-->
                             <!--<tbody>-->
                             <!--<tr>-->
                             <!--<tr>-->
@@ -805,11 +808,11 @@
                             <!--</tr>-->
                             <!--</tr>-->
                             <!--</tbody>-->
                             <!--</tbody>-->
                             <tbody ng-repeat="project in $data">
                             <tbody ng-repeat="project in $data">
-                            <tr>
+                            <tr  ng-click="showDetail(project.id)" title="查看详情">
                                 <!--<td><input type="checkbox"></td>-->
                                 <!--<td><input type="checkbox"></td>-->
                                 <td>
                                 <td>
                                     <div class="name">
                                     <div class="name">
-                                        <p><a ng-click="showDetail(project.id)">{{project.name}}</a></p>
+                                        <p><a>{{project.name}}</a></p>
                                         <!--<div><span>编辑</span></div>-->
                                         <!--<div><span>编辑</span></div>-->
                                     </div>
                                     </div>
                                 </td>
                                 </td>
@@ -819,8 +822,8 @@
                                 <td>{{project.orgName}}</td>
                                 <td>{{project.orgName}}</td>
                                 <td>{{project.organization.type == 1 ? '公募' : '非公募'}}</td>
                                 <td>{{project.organization.type == 1 ? '公募' : '非公募'}}</td>
                                 <td>{{project.target||0}}元</td>
                                 <td>{{project.target||0}}元</td>
-                                <td>{{project.totalAmount||0.00}}元 <br/>({{(project.totalAmount/project.target*100)||0|number:2}})%</td>
-                                <td>{{project.joinAmount}}人次</td>
+                                <td>{{project.totalAmount || 0.00}}元 <br/>({{(project.totalAmount || 0/project.target || 0*100)||0|number:2}})%</td>
+                                <td>{{project.joinAmount || 0}}人次</td>
                                 <td></td>
                                 <td></td>
                             </tr>
                             </tr>
                             </tbody>
                             </tbody>