瀏覽代碼

console用户列表,service用户中心。机构修改。

dongbw 8 年之前
父節點
當前提交
cb772d2aaa
共有 42 個文件被更改,包括 1470 次插入717 次删除
  1. 13 2
      donate-console/src/main/java/com/uas/console/donate/controller/OrgController.java
  2. 116 9
      donate-console/src/main/java/com/uas/console/donate/controller/UserController.java
  3. 3 0
      donate-console/src/main/java/com/uas/console/donate/dao/UserDao.java
  4. 0 2
      donate-console/src/main/java/com/uas/console/donate/model/ActivityRecode.java
  5. 24 24
      donate-console/src/main/java/com/uas/console/donate/model/Org.java
  6. 2 2
      donate-console/src/main/java/com/uas/console/donate/model/ProjectRecode.java
  7. 13 0
      donate-console/src/main/java/com/uas/console/donate/model/SearchFilter.java
  8. 43 1
      donate-console/src/main/java/com/uas/console/donate/model/User.java
  9. 4 2
      donate-console/src/main/java/com/uas/console/donate/service/OrgService.java
  10. 30 1
      donate-console/src/main/java/com/uas/console/donate/service/UserService.java
  11. 69 20
      donate-console/src/main/java/com/uas/console/donate/service/impl/OrgServiceImpl.java
  12. 141 2
      donate-console/src/main/java/com/uas/console/donate/service/impl/UserServiceImpl.java
  13. 8 0
      donate-console/src/main/java/com/uas/console/donate/web/filter/SSOInterceptor.java
  14. 1 1
      donate-console/src/main/webapp/WEB-INF/views/index.html
  15. 279 125
      donate-console/src/main/webapp/resources/js/index/app.js
  16. 8 0
      donate-console/src/main/webapp/resources/js/index/services/Organization.js
  17. 47 0
      donate-console/src/main/webapp/resources/js/index/services/User.js
  18. 1 0
      donate-console/src/main/webapp/resources/view/project/project_list.html
  19. 4 4
      donate-console/src/main/webapp/resources/view/user/organization_detail.html
  20. 18 32
      donate-console/src/main/webapp/resources/view/user/organization_list.html
  21. 173 0
      donate-console/src/main/webapp/resources/view/user/user_detail.html
  22. 90 0
      donate-console/src/main/webapp/resources/view/user/user_edit.html
  23. 30 404
      donate-console/src/main/webapp/resources/view/user/user_list.html
  24. 0 10
      donate-service/src/main/java/com/uas/service/donate/controller/ActivityRecodeController.java
  25. 11 0
      donate-service/src/main/java/com/uas/service/donate/controller/AlipayController.java
  26. 4 4
      donate-service/src/main/java/com/uas/service/donate/controller/ProjectController.java
  27. 0 10
      donate-service/src/main/java/com/uas/service/donate/controller/ProjectRecodeController.java
  28. 36 2
      donate-service/src/main/java/com/uas/service/donate/controller/UserController.java
  29. 11 0
      donate-service/src/main/java/com/uas/service/donate/controller/WxpayController.java
  30. 14 0
      donate-service/src/main/java/com/uas/service/donate/model/ActivityRecode.java
  31. 44 0
      donate-service/src/main/java/com/uas/service/donate/model/User.java
  32. 21 0
      donate-service/src/main/java/com/uas/service/donate/service/UserService.java
  33. 22 4
      donate-service/src/main/java/com/uas/service/donate/service/impl/ActivityRecodeServiceImpl.java
  34. 2 0
      donate-service/src/main/java/com/uas/service/donate/service/impl/ActivityServiceImpl.java
  35. 6 1
      donate-service/src/main/java/com/uas/service/donate/service/impl/ProjectServiceImpl.java
  36. 56 0
      donate-service/src/main/java/com/uas/service/donate/service/impl/UserServiceImpl.java
  37. 88 6
      donate-service/src/main/resources/templates/activeCenter.ftl
  38. 7 7
      donate-service/src/main/resources/templates/index.ftl
  39. 3 4
      donate-service/src/main/webapp/resources/js/common/query/User.js
  40. 1 1
      donate-service/src/main/webapp/resources/js/user/app.js
  41. 17 2
      donate-service/src/main/webapp/resources/js/user/controllers/UserCtrl.js
  42. 10 35
      donate-service/src/main/webapp/resources/view/user/user_center.html

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

@@ -154,7 +154,7 @@ public class OrgController {
      */
     @ResponseBody
     @RequestMapping(value = "/approve/{id}",method = RequestMethod.POST)
-    public Org approve(@PathVariable("id") Long id){
+    public ModelMap approve(@PathVariable("id") Long id){
         return orgService.approve(id);
     }
 
@@ -163,7 +163,7 @@ public class OrgController {
      */
     @ResponseBody
     @RequestMapping(value = "/unapprove/{id}",method = RequestMethod.POST)
-    public Org unapprove(@PathVariable("id") Long id,String refuse){
+    public ModelMap unapprove(@PathVariable("id") Long id,String refuse){
         return orgService.unapprove(id,refuse);
     }
 
@@ -251,4 +251,15 @@ public class OrgController {
     public ModelMap getOrgsNum(){
         return orgService.getOrgsNum();
     }
+
+    /**
+     * 删除机构信息(未通过)
+     * @param id
+     * @return
+     */
+    @RequestMapping(value="/delete/{id}", method = RequestMethod.DELETE)
+    @ResponseBody
+    public ModelMap delete(@PathVariable("id") Long id){
+        return orgService.delete(id);
+    }
 }

+ 116 - 9
donate-console/src/main/java/com/uas/console/donate/controller/UserController.java

@@ -1,31 +1,138 @@
 package com.uas.console.donate.controller;
 
-import com.uas.console.donate.model.User;
+import com.alibaba.fastjson.JSONObject;
+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.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
+import com.uas.platform.core.web.bind.RequestState;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.ResponseBody;
 
 import java.util.List;
 
+/**
+ * 处理用户相关请求
+ */
+
 @Controller
 @RequestMapping("/user")
-public class UserController extends CommonController{
+public class UserController extends CommonController {
 
+    /**
+     * 用户Service
+     */
     @Autowired
     private UserService userService;
 
-	/**
-	 * 获取所以用户信息
-	 *
-	 * @return
-	 */
-	@ResponseBody
+    /**
+     * 获取所以用户信息
+     * @return 用户list
+     */
+    @ResponseBody
     @RequestMapping("/getUsers")
-    public List<User> getUsers(){
+    public List<User> getUsers() {
         return userService.findAll();
     }
 
+    /**
+     * 获取用户列表 (全部)
+     * @param params 分页参数
+     * @param searchFilter 查找filter
+     * @return 用户分页
+     */
+    @RequestMapping(method = RequestMethod.GET)
+    @ResponseBody
+    public Page<User> getAllUsers(PageParams params, String searchFilter) {
+        PageInfo pageInfo = new PageInfo(params);
+        SearchFilter filter = JSONObject.parseObject(searchFilter, SearchFilter.class);
+        return userService.getAllUsers(pageInfo, filter);
+    }
+
+    /**
+     * 获取用户列表 (管理员)
+     * @param params 分页参数
+     * @param searchFilter 查找filter
+     * @return 用户分页
+     */
+    @RequestMapping(params = RequestState.DONE, method = RequestMethod.GET)
+    @ResponseBody
+    public Page<User> getAdmins(PageParams params, String searchFilter) {
+        PageInfo pageInfo = new PageInfo(params);
+        SearchFilter filter = JSONObject.parseObject(searchFilter, SearchFilter.class);
+        return userService.getAdmins(pageInfo, filter);
+    }
+
+    /**
+     * 获取用户列表 (机构用户)
+     * @param params 分页参数
+     * @param searchFilter 查找filter
+     * @return 用户分页
+     */
+    @RequestMapping(params = RequestState.TODO, method = RequestMethod.GET)
+    @ResponseBody
+    public Page<User> getOrgUsers(PageParams params, String searchFilter) {
+        PageInfo pageInfo = new PageInfo(params);
+        SearchFilter filter = JSONObject.parseObject(searchFilter, SearchFilter.class);
+        return userService.getOrgUsers(pageInfo, filter);
+    }
+
+    /**
+     * 获取用户列表 (机构操作员)
+     * @param params 分页参数
+     * @param searchFilter 查找filter
+     * @return 用户分页
+     */
+    @RequestMapping(params = RequestState.END, method = RequestMethod.GET)
+    @ResponseBody
+    public Page<User> getOrgOperators(PageParams params, String searchFilter) {
+        PageInfo pageInfo = new PageInfo(params);
+        SearchFilter filter = JSONObject.parseObject(searchFilter, SearchFilter.class);
+        return userService.getOrgOperators(pageInfo, filter);
+    }
+
+    /**
+     * 获取各类用户数量
+     * @return 各类用户数量
+     */
+    @RequestMapping(value = "/getUserNum", method = RequestMethod.GET)
+    @ResponseBody
+    public ModelMap getUserNum() {
+        return userService.getUserNum();
+    }
+
+    /**
+     * 获取已参与项目
+     * @param params 分页参数
+     * @param searchFilter 查找filter
+     * @return 用户分页
+     */
+    @RequestMapping(value = "/getJoinedProjectRecords", method = RequestMethod.GET)
+    @ResponseBody
+    public Page<ProjectRecode> getJoinedProjectRecords(PageParams params, String searchFilter) {
+        PageInfo pageInfo = new PageInfo(params);
+        SearchFilter filter = JSONObject.parseObject(searchFilter, SearchFilter.class);
+        return userService.getJoinedProjectRecords(pageInfo, filter);
+    }
+
+    /**
+     * 获取已参与活动
+     * @param params 分页参数
+     * @param searchFilter 查找filter
+     * @return 用户分页
+     */
+    @RequestMapping(value = "/getJoinedActivityRecords", method = RequestMethod.GET)
+    @ResponseBody
+    public Page<ActivityRecode> getJoinedActivityRecords(PageParams params, String searchFilter) {
+        PageInfo pageInfo = new PageInfo(params);
+        SearchFilter filter = JSONObject.parseObject(searchFilter, SearchFilter.class);
+        return userService.getJoinedActivityRecords(pageInfo, filter);
+    }
+
 }

+ 3 - 0
donate-console/src/main/java/com/uas/console/donate/dao/UserDao.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 UserDao extends JpaRepository<User,Long>,JpaSpecificationExecutor<User>{
 
+    List<User> findByType(String type);
 }

+ 0 - 2
donate-console/src/main/java/com/uas/console/donate/model/ActivityRecode.java

@@ -150,8 +150,6 @@ public class ActivityRecode {
         this.awardLeavel = awardLeavel;
     }
 
-    @JsonIgnore
-    @JSONField(serialize = false)
     public Activity getActivity() {
         return activity;
     }

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

@@ -72,13 +72,13 @@ public class Org implements Serializable{
     /**
      * 机构全称
      */
-    @Column(name="org_name")
+    @Column(name = "org_name")
     private String name;
 
     /**
      * 机构电话
      */
-    @Column(name="org_tel")
+    @Column(name = "org_tel")
     private String telphone;
 
     /**
@@ -90,13 +90,13 @@ public class Org implements Serializable{
     /**
      * 所属市
      */
-    @Column(name="org_city")
+    @Column(name = "org_city")
     private String city;
 
     /**
      * 详细地址
      */
-    @Column(name="org_address")
+    @Column(name = "org_address")
     private String address;
 
     /**
@@ -117,117 +117,117 @@ public class Org implements Serializable{
     /**
      * 年募捐额
      */
-    @Column(name="org_year_donations")
+    @Column(name = "org_year_donations")
     private String yearDonationAmount;
 
     /**
      * 全职人数
      */
-    @Column(name="org_full_times")
+    @Column(name = "org_full_times")
     private String fullTimePopulation;
 
     /**
      * 兼职人数
      */
-    @Column(name="org_part_times")
+    @Column(name = "org_part_times")
     private String partTimePopulation;
 
     /**
      * 志愿者人数
      */
-    @Column(name="org_voluntaries")
+    @Column(name = "org_voluntaries")
     private String voluntaryPopulation;
 
     /**
      * 成立日期
      */
-    @Column(name="org_create_time")
+    @Column(name = "org_create_time")
     private Date createTime;
 
     /**
      * 官网地址
      */
-    @Column(name="org_website")
+    @Column(name = "org_website")
     private String website;
 
     /**
      * 机构简介
      */
-    @Column(name="org_summary")
+    @Column(name = "org_summary")
     private String summary;
 
     /**
      * 负责人姓名
      */
-    @Column(name="org_manager_name")
+    @Column(name = "org_manager_name")
     private String managerName;
 
     /**
      * 负责人身份证号
      */
-    @Column(name="org_manager_idcard")
+    @Column(name = "org_manager_idcard")
     private String managerIdcard;
 
     /**
      * 负责人办公电话
      */
-    @Column(name="org_manager_oph")
+    @Column(name = "org_manager_oph")
     private String managerOph;
 
     /**
      * 负责人个人手机
      */
-    @Column(name="org_manager_mobile")
+    @Column(name = "org_manager_mobile")
     private String managerMobile;
 
     /**
      * 联系人姓名
      */
-    @Column(name="org_contact_name")
+    @Column(name = "org_contact_name")
     private String contactName;
 
     /**
      * 联系人身份证号
      */
-    @Column(name="org_contact_idcard")
+    @Column(name = "org_contact_idcard")
     private String contactIdcard;
 
     /**
      * 联系人电话
      */
-    @Column(name="org_contact_tel")
+    @Column(name = "org_contact_tel")
     private String contactTel;
 
 
     /**
      * 联系人电子邮箱
      */
-    @Column(name ="org_contact_email")
+    @Column(name = "org_contact_email")
     private String contactEmail;
 
     /**
      * 银行卡开户名称
      */
-    @Column(name="org_bank_card_name")
+    @Column(name = "org_bank_card_name")
     private String bankCardName;
 
 
     /**
      * 开户银行
      */
-    @Column(name="org_card_of_bank")
+    @Column(name = "org_card_of_bank")
     private String cardOfBank;
 
     /**
      * 银行卡支行信息
      */
-    @Column(name="org_branch_message")
+    @Column(name = "org_branch_message")
     private String branchMessage;
 
     /**
      * 银行卡账号
      */
-    @Column(name="org_bank_account")
+    @Column(name = "org_bank_account")
     private Long account;
 
     /**
@@ -260,7 +260,7 @@ public class Org implements Serializable{
     /**
      * 法人身份证
      */
-    @Column(name="org_legal_idcard")
+    @Column(name = "org_legal_idcard")
     private String legalIdCard;
 
 

+ 2 - 2
donate-console/src/main/java/com/uas/console/donate/model/ProjectRecode.java

@@ -8,7 +8,7 @@ import java.util.Date;
 @Table(name="donate$projectrecode")
 public class ProjectRecode {
 
-    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 
     @Id
     @GeneratedValue(strategy= GenerationType.IDENTITY)
@@ -31,7 +31,7 @@ public class ProjectRecode {
     /**
      * 优软云账号
      */
-    @Column(name="pr_uuid")
+    @Column(name= "pr_uuid")
     private Long uuid;
 
     /**

+ 13 - 0
donate-console/src/main/java/com/uas/console/donate/model/SearchFilter.java

@@ -16,6 +16,11 @@ public class SearchFilter {
 	 */
 	private String area;
 
+	/**
+	 * id参数
+	 */
+	private Long id;
+
 	/**
 	 * 机构性质
 	 */
@@ -104,4 +109,12 @@ public class SearchFilter {
 	public void setType(Integer type) {
 		this.type = type;
 	}
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
 }

+ 43 - 1
donate-console/src/main/java/com/uas/console/donate/model/User.java

@@ -49,11 +49,29 @@ public class User implements Serializable{
     private Long userIMId;
 
     /**
-     *用户所属类型
+     * 用户所属类型
      */
     @Column(name = "user_type")
     private String type;
 
+    /**
+     * 参加项目次数
+     */
+    @Column(name = "user_times")
+    private Integer times;
+
+    /**
+     * 总捐款额
+     */
+    @Column(name = "user_donation")
+    private Double donation;
+
+    /**
+     * 参加活动个数
+     */
+    @Column(name = "user_act_times")
+    private Integer actTimes;
+
     public User() {
 
     }
@@ -128,4 +146,28 @@ public class User implements Serializable{
     public void setType(String type) {
         this.type = type;
     }
+
+    public Integer getTimes() {
+        return times;
+    }
+
+    public void setTimes(Integer times) {
+        this.times = times;
+    }
+
+    public Double getDonation() {
+        return donation;
+    }
+
+    public void setDonation(Double donation) {
+        this.donation = donation;
+    }
+
+    public Integer getActTimes() {
+        return actTimes;
+    }
+
+    public void setActTimes(Integer actTimes) {
+        this.actTimes = actTimes;
+    }
 }

+ 4 - 2
donate-console/src/main/java/com/uas/console/donate/service/OrgService.java

@@ -27,10 +27,10 @@ public interface OrgService {
     Org findOne(Long id);
 
     //批准机构申请
-    Org approve(Long id);
+    ModelMap approve(Long id);
 
     //驳回机构申请
-    Org unapprove(Long id,String refuse);
+    ModelMap unapprove(Long id,String refuse);
 
     //取出某状态下的所有机构
     List<Org> findByStatus(Integer status);
@@ -56,4 +56,6 @@ public interface OrgService {
     Page<Org> getDisagreedOrgs(PageInfo pageInfo, SearchFilter filter);
 
     ModelMap getOrgsNum();
+
+    ModelMap delete(Long id);
 }

+ 30 - 1
donate-console/src/main/java/com/uas/console/donate/service/UserService.java

@@ -1,6 +1,9 @@
 package com.uas.console.donate.service;
 
-import com.uas.console.donate.model.User;
+import com.uas.console.donate.model.*;
+import com.uas.platform.core.model.PageInfo;
+import org.springframework.data.domain.Page;
+import org.springframework.ui.ModelMap;
 
 import java.util.List;
 
@@ -8,4 +11,30 @@ public interface UserService {
     List<User> findAll();
 
     User findOne(Long uu);
+
+    Page<User> getAllUsers(PageInfo pageInfo, SearchFilter filter);
+
+    Page<User> getAdmins(PageInfo pageInfo, SearchFilter filter);
+
+    Page<User> getOrgUsers(PageInfo pageInfo, SearchFilter filter);
+
+    Page<User> getOrgOperators(PageInfo pageInfo, SearchFilter filter);
+
+    ModelMap getUserNum();
+
+    /**
+     * 获取已参与项目
+     * @param pageInfo 分页参数
+     * @param filter 查找filter
+     * @return 用户分页
+     */
+    Page<ProjectRecode> getJoinedProjectRecords(PageInfo pageInfo, SearchFilter filter);
+
+    /**
+     * 获取已参与活动
+     * @param pageInfo 分页参数
+     * @param filter 查找filter
+     * @return 用户分页
+     */
+    Page<ActivityRecode> getJoinedActivityRecords(PageInfo pageInfo, SearchFilter filter);
 }

+ 69 - 20
donate-console/src/main/java/com/uas/console/donate/service/impl/OrgServiceImpl.java

@@ -33,11 +33,13 @@ public class OrgServiceImpl implements OrgService {
     private OrgDao orgDao;
 
     //取出机构信息
+    @Override
     public Org show(Long uuid){
         return orgDao.findByUuid(uuid);
     }
 
     //保存机构
+    @Override
     public ModelMap save(Org org){
         ModelMap map = new ModelMap();
         //如果机构不是发布状态,就设置为草稿状态
@@ -56,6 +58,7 @@ public class OrgServiceImpl implements OrgService {
     }
 
     //提交机构申请
+    @Override
     public ModelMap sumbit(Org org){
         ModelMap map = new ModelMap();
         //设置未审核
@@ -79,53 +82,82 @@ public class OrgServiceImpl implements OrgService {
     }
 
     //查询某一机构具体信息
+    @Override
     public Org findOne(Long id){
         return orgDao.findOne(id);
     }
 
+    @Override
     public Page<Org> findAll(Pageable pageable){
 
         return orgDao.findAll(pageable);
     }
 
-
-
     //批准某机构
-    public Org approve(Long id){
-        Org org=orgDao.findOne(id);
-        org.setStatus(1);
-        return orgDao.save(org);
+    @Override
+    public ModelMap approve(Long id){
+        ModelMap map = new ModelMap();
+        try {
+            Org org=orgDao.findOne(id);
+            if (org == null) {
+                map.put("error", "未找到该机构记录");
+                return map;
+            }
+            org.setStatus(1);
+            orgDao.save(org);
+            map.put("success", "批准成功");
+        } catch (Exception e) {
+            map.put("error", "出现错误,操作失败");
+        }
+        return map;
     }
 
     //驳回某机构
-    public Org unapprove(Long id,String refuse){
-        Org org=orgDao.findOne(id);
-        org.setStatus(2);
-        org.setRefuse(refuse);
-        return orgDao.save(org);
+    @Override
+    public ModelMap unapprove(Long id,String refuse){
+        ModelMap map = new ModelMap();
+        try {
+            Org org=orgDao.findOne(id);
+            if (org == null) {
+                map.put("error", "未找到该机构记录");
+                return map;
+            }
+            org.setStatus(2);
+            org.setRefuse(refuse);
+            orgDao.save(org);
+            map.put("success", "驳回成功");
+        } catch (Exception e) {
+            map.put("error", "出现错误,操作失败");
+        }
+        return map;
     }
 
     //取出某状态下的所有机构
+    @Override
     public List<Org> findByStatus(Integer status){
         return orgDao.findByStatus(status);
     }
 
     //查询某审核状态下,属于某类别的机构
+    @Override
     public List<Org> findByType(Integer type,Integer status){
         return orgDao.findByType(type,status);
     }
 
     //查询某审核状态下,属于某领域的机构
+    @Override
     public List<Org> findByMajorArea(Integer majorArea,Integer status){
         return orgDao.findByMajorArea(majorArea,status);
     }
 
     //查询某审核状态下,属于某类别和领域的机构
+    @Override
     public List<Org> findByTypeAndMajorArea(Integer type,Integer majorArea,Integer status){
         return orgDao.findByTypeAndMajorArea(type,majorArea,status);
     }
 
     //根据搜索框查询机构信息
+    @Override
     public List<Org> search(String search){
         return orgDao.search(search);
     }
@@ -138,20 +170,20 @@ public class OrgServiceImpl implements OrgService {
                 if (null != filter) {
                     String keyword = filter.getKeyword();
                     if (StringUtils.hasText(keyword)) {
-                        pageInfo.expression(PredicateUtils.or(PredicateUtils.like("name", keyword, false),
-                                PredicateUtils.like("code", keyword, false),
-                                PredicateUtils.like("summary", keyword, false),
-                                PredicateUtils.like("person", keyword, false),
-                                PredicateUtils.like("managerName", keyword, false),
-                                PredicateUtils.like("contactName", keyword, false)));
+                        pageInfo.expression(PredicateUtils.or(PredicateUtils.like("name", keyword, false, true),
+                                PredicateUtils.like("code", keyword, false, true),
+                                PredicateUtils.like("summary", keyword, false, true),
+                                PredicateUtils.like("person", keyword, false, true),
+                                PredicateUtils.like("managerName", keyword, false, true),
+                                PredicateUtils.like("contactName", keyword, false, true)));
                     }
                     // 默认全部分类设置值为0  因为项目中area为string,所以searchFilter中为string
-                    if (null != filter.getArea() && !"".equals(filter.getArea()) && !"0".equals(filter.getArea())) {
-                        pageInfo.expression(PredicateUtils.eq("area", Integer.valueOf(filter.getArea()), false));
+                    if (null != filter.getArea() && !"全部".equals(filter.getArea())) {
+                        pageInfo.expression(PredicateUtils.eq("majorArea", filter.getArea(), false));
                     }
                     // 机构类型 默认为0
                     if (null != filter.getType() && 0 != filter.getType()) {
-                        pageInfo.expression(PredicateUtils.eq("type", Integer.valueOf(filter.getType()), false));
+                        pageInfo.expression(PredicateUtils.eq("type", filter.getType(), false));
                     }
                 }
                 query.where(pageInfo.getPredicates(root, query, cb));
@@ -187,4 +219,21 @@ public class OrgServiceImpl implements OrgService {
         return map;
     }
 
+    @Override
+    public ModelMap delete(Long id) {
+        ModelMap map = new ModelMap();
+        Org org = orgDao.findOne(id);
+        if (org == null) {
+            map.put("error", "未找到对应机构");
+        } else {
+            try {
+                orgDao.delete(id);
+                map.put("success", "删除成功");
+            } catch (Exception e) {
+                map.put("error", "出现异常,删除失败");
+            }
+        }
+        return map;
+    }
+
 }

+ 141 - 2
donate-console/src/main/java/com/uas/console/donate/service/impl/UserServiceImpl.java

@@ -1,19 +1,63 @@
 package com.uas.console.donate.service.impl;
 
-import com.uas.console.donate.dao.UserDao;
-import com.uas.console.donate.model.User;
+import com.uas.console.donate.core.support.SystemSession;
+import com.uas.console.donate.dao.*;
+import com.uas.console.donate.model.*;
 import com.uas.console.donate.service.UserService;
+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.ui.ModelMap;
+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;
 
+/**
+ * 用户相关
+ */
+
 @Service
 public class UserServiceImpl implements UserService{
 
+    /**
+     * 用户DAO
+     */
     @Autowired
     private UserDao userDao;
 
+    /**
+     * 项目DAO
+     */
+    @Autowired
+    private ProjectDao projectDao;
+
+    /**
+     * 活动DAO
+     */
+    @Autowired
+    private ActivityDao activityDao;
+
+    /**
+     * 项目参与记录DAO
+     */
+    @Autowired
+    private ProjectRecodeDao projectRecodeDao;
+
+    /**
+     * 活动参与记录DAO
+     */
+    @Autowired
+    private ActivityRecodeDao activityRecodeDao;
+
+    @Override
     public List<User> findAll(){
         return userDao.findAll();
     }
@@ -22,4 +66,99 @@ public class UserServiceImpl implements UserService{
     public User findOne(Long uu) {
         return userDao.findOne(uu);
     }
+
+    @Override
+    public Page<User> getAllUsers(final PageInfo pageInfo, final SearchFilter filter) {
+        return userDao.findAll(new Specification<User>() {
+            @Override
+            public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+                if (null != filter) {
+                    String keyword = filter.getKeyword();
+                    if (StringUtils.hasText(keyword)) {
+                        pageInfo.expression(PredicateUtils.or(PredicateUtils.like("name", keyword, false, true),
+                                PredicateUtils.like("userUU", keyword, false, true),
+                                PredicateUtils.like("tel", keyword, false, true),
+                                PredicateUtils.like("userEmail", keyword, false, true),
+                                PredicateUtils.like("org.name", keyword, false, true),
+                                PredicateUtils.like("org.province", keyword, false, true),
+                                PredicateUtils.like("org.city", keyword, false, true)));
+                    }
+                }
+                query.where(pageInfo.getPredicates(root, query, cb));
+                return null;
+            }
+        }, pageInfo);
+    }
+
+    @Override
+    public Page<User> getAdmins(PageInfo pageInfo, SearchFilter filter) {
+        pageInfo.expression(PredicateUtils.eq("type", "管理员", false));
+        return getAllUsers(pageInfo, filter);
+    }
+
+    @Override
+    public Page<User> getOrgUsers(PageInfo pageInfo, SearchFilter filter) {
+        pageInfo.expression(PredicateUtils.eq("type", "机构用户", false));
+        return getAllUsers(pageInfo, filter);
+    }
+
+    @Override
+    public Page<User> getOrgOperators(PageInfo pageInfo, SearchFilter filter) {
+        pageInfo.expression(PredicateUtils.eq("type", "机构操作员", false));
+        return getAllUsers(pageInfo, filter);
+    }
+
+    @Override
+    public ModelMap getUserNum() {
+        ModelMap map = new ModelMap();
+        map.put("allUserNum", !CollectionUtils.isEmpty(userDao.findAll()) ? userDao.findAll().size() : 0);
+        map.put("adminNum", !CollectionUtils.isEmpty(userDao.findByType("管理员")) ? userDao.findByType("管理员").size() : 0);
+        map.put("orgUserNum", !CollectionUtils.isEmpty(userDao.findByType("机构用户")) ? userDao.findByType("机构用户").size() : 0);
+        map.put("orgOperatorNum", !CollectionUtils.isEmpty(userDao.findByType("机构操作员")) ? userDao.findByType("机构操作员").size() : 0);
+        return map;
+    }
+
+    /**
+     * 获取已参与项目
+     *
+     * @param pageInfo 分页参数
+     * @param filter   查找filter
+     * @return 用户分页
+     */
+    @Override
+    public Page<ProjectRecode> getJoinedProjectRecords(final PageInfo pageInfo, final SearchFilter filter) {
+        final Long userUU = filter.getId();
+        if (null != userUU) {
+            return projectRecodeDao.findAll(new Specification<ProjectRecode>() {
+                @Override
+                public Predicate toPredicate(Root<ProjectRecode> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+                    query.where(cb.equal(root.get("uuid"), userUU));
+                    return null;
+                }
+            }, pageInfo);
+        }
+        return null;
+    }
+
+    /**
+     * 获取已参与活动
+     *
+     * @param pageInfo 分页参数
+     * @param filter   查找filter
+     * @return 用户分页
+     */
+    @Override
+    public Page<ActivityRecode> getJoinedActivityRecords(PageInfo pageInfo, SearchFilter filter) {
+        final Long userUU = filter.getId();
+        if (null != userUU) {
+            return activityRecodeDao.findAll(new Specification<ActivityRecode>() {
+                @Override
+                public Predicate toPredicate(Root<ActivityRecode> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+                    query.where(cb.equal(root.get("uuid"), userUU));
+                    return null;
+                }
+            }, pageInfo);
+        }
+        return null;
+    }
 }

+ 8 - 0
donate-console/src/main/java/com/uas/console/donate/web/filter/SSOInterceptor.java

@@ -21,6 +21,9 @@ import javax.servlet.http.HttpServletResponse;
 @Component
 public class SSOInterceptor extends AbstractSSOInterceptor {
 
+	/**
+	 * 用户DAO
+	 */
 	@Autowired
 	private UserDao userDao;
 
@@ -64,6 +67,11 @@ public class SSOInterceptor extends AbstractSSOInterceptor {
 		}
 	}
 
+	/**
+	 * 从token获取User信息
+	 * @param token token信息
+	 * @return 登录用户信息
+	 */
 	private UserView getUserByToken(SSOToken token) {
         UserView user = null;
 		if (token != null && !StringUtils.isEmpty(token.getData())) {

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

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html lang="en">
 <head>
-    <title>后台管理</title>
+    <title>后台管理-一元捐</title>
     <meta name="keywords" content="">
     <meta name="description" content="">
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

+ 279 - 125
donate-console/src/main/webapp/resources/js/index/app.js

@@ -2,9 +2,9 @@
  * 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'], 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'], function(angularAMD) {
 	'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']);
+	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']);
         app.init = function() {
 		angularAMD.bootstrap(app);
 	};
@@ -161,6 +161,9 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
         return url;
     };
 
+    // 定义主要领域
+    var areas = ['全部', '疾病援助', '扶贫/救灾', '教育/助学' , '环境/动物保护', '其他'];
+
     app.controller('AuthCtrl', ['$scope', '$window', 'AuthenticationService', 'toaster', 'BaseService', '$modal', 'SessionService',
         function ($scope, $window, AuthenticationService, toaster, BaseService, $modal, SessionService) {
         $scope.isAuthed = AuthenticationService.isAuthed();		//AuthenticationService模块在common/下
@@ -2230,10 +2233,11 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
             $scope.setActive = function (value) {
                 if ($scope.active != value) {
                     $scope.active = value;
-                    if ($scope.activityParams.page() == 1)
+                    if ($scope.activityParams.page() == 1) {
                         $scope.activityParams.reload();
-                    else
+                    } else {
                         $scope.activityParams.page(1);
+                    }
                 }
             };
 
@@ -2792,11 +2796,13 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
             }
             $scope.keyword = '';
 
+            $scope.areas = areas;
+
             /**
              * 修改分类
              * @param value
              */
-            $scope.setActive = function (value) {
+            $scope.setState = function (value) {
                 if ($scope.active != value) {
                     $scope.active = value;
                     if ($scope.orgParams.page() == 1)
@@ -2815,7 +2821,7 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
 
             $scope.orgParams = new ngTableParams({
                 page: 1,
-                count: 5,
+                count: 10,
                 sorting: {
                     'id': 'desc'
                 }
@@ -2875,9 +2881,6 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
                 });
 
                 modalInstance.result.then(function(data){
-                    if (data.success) {
-                        toaster.pop('success', '操作成功');
-                    }
                     $scope.orgParams.reload();
                 }, function(){
 
@@ -2885,6 +2888,29 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
 
             };
 
+            // true通过 false驳回
+            $scope.auditOrg = function(org, type) {
+                var modalInstance = $modal.open({
+                    animation: true,
+                    templateUrl: 'static/view/user/org_audit.html',
+                    controller: 'OrgAuditCtrl',
+                    resolve: {
+                        org : function() {
+                            return org;
+                        },
+                        type : function() {
+                            return type;
+                        }
+                    }
+                });
+
+                modalInstance.result.then(function(data){
+                    $scope.orgParams.reload();
+                }, function(){
+
+                });
+            };
+
 
         }]);
 
@@ -2926,15 +2952,22 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
                 });
 
                 modalInstance.result.then(function(data){
+                    loadData();
+                    $modalInstance.close(data);
+                }, function(){
+
+                });
+            };
+
+            $scope.delete = function(id) {
+                Organization.delete({id: id}, {}, function(data) {
                     if (data.success) {
-                        toaster.pop('success','操作成功');
+                       toaster.pop('success', data.success);
+                       $modalInstance.close(data);
                     }
                     if (data.error) {
-                        toaster.pop('error','操作失败');
+                       toaster.pop('error', data.error);
                     }
-                    loadData();
-                }, function(){
-
                 });
             };
         }]);
@@ -2956,12 +2989,24 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
         // true通过 false驳回
         $scope.ensure = function(type) {
             if (type) {
-                Organization.agree({id: $scope.org.id}, {}, function () {
-                    toaster.pop('success', '审核成功');
+                Organization.agree({id: $scope.org.id}, {}, function (data) {
+                    if (data.success) {
+                        toaster.pop('success','审核成功');
+                    }
+                    if (data.error) {
+                        toaster.pop('error','操作失败');
+                    }
+                    $modalInstance.close(data);
                 });
             } else {
-                Organization.disagree({id: $scope.org.id, refuse: $scope.org.refuse}, {}, function () {
-                    toaster.pop('success', '驳回成功');
+                Organization.disagree({id: $scope.org.id, refuse: $scope.org.refuse}, {}, function (data) {
+                    if (data.success) {
+                        toaster.pop('success','驳回成功');
+                    }
+                    if (data.error) {
+                        toaster.pop('error','操作失败');
+                    }
+                    $modalInstance.close(data);
                 });
             }
         };
@@ -2975,125 +3020,234 @@ define([ 'angularAMD', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTable', 'file-
             BaseService.scrollBackToTop();
             $rootScope.tree = 'user';
             $rootScope.thief = 'userList';
-            // var getOrgState = function (active) {
-            //     var fn = 'getAudited';
-            //     switch (active) {
-            //         // 已审核
-            //         case 'audited':
-            //             fn = 'getAudited';
-            //             break;
-            //         // 未审核
-            //         case 'unaudited':
-            //             fn = 'getUnaudited';
-            //             break;
-            //         // 未通过
-            //         case 'disagreed':
-            //             fn = 'getDisagreed';
-            //             break;
-            //     }
-            //     return fn;
-            // };
-            //
-            // $scope.active = 'done';
-            // if ($rootScope.active) {
-            //     $scope.active = $rootScope.active;
-            // }
-            // $scope.keyword = '';
-            //
-            // /**
-            //  * 修改分类
-            //  * @param value
-            //  */
-            // $scope.setActive = function (value) {
-            //     if ($scope.active != value) {
-            //         $scope.active = value;
-            //         if ($scope.orgParams.page() == 1)
-            //             $scope.orgParams.reload();
-            //         else
-            //             $scope.orgParams.page(1);
-            //     }
-            // };
-            //
-            // $scope.reload = function() {
-            //     if ($scope.orgParams.page() == 1)
-            //         $scope.orgParams.reload();
-            //     else
-            //         $scope.orgParams.page(1);
-            // };
-            //
-            // $scope.orgParams = new ngTableParams({
-            //     page: 1,
-            //     count: 5,
-            //     sorting: {
-            //         'id': 'desc'
-            //     }
-            // }, {
-            //     total: 0,
-            //     counts: [5, 10, 25, 50],
-            //     getData: function ($defer, params) {
-            //         $scope.loading = true;
-            //         var pageParams = params.url();
-            //         var realActive = {};
-            //         pageParams.searchFilter = { // 筛选条件
-            //             keyword: $scope.keyword,
-            //             area: $scope.selectedArea,
-            //             type: $scope.selectedType
-            //         };
-            //         Organization[getOrgState($scope.active)].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.orgParams.page() == 1)
-            //         $scope.orgParams.reload();
-            //     else
-            //         $scope.orgParams.page(1);
-            // };
-            //
-            // var getNum = function() {
-            //     Organization.getOrgsNum({}, {}, function(data) {
-            //         $scope.auditedNum = data.auditedNum;
-            //         $scope.unauditedNum = data.unauditedNum;
-            //         $scope.disagreedNum = data.disagreedNum;
-            //     });
-            // };
-            // getNum();
-            //
-            // // 弹出详情页模态框
-            // $scope.showDetail = function (id) {
+            var getState = function (active) {
+                var fn = 'getAll';
+                switch (active) {
+                    // 管理员
+                    case 'admin':
+                        fn = 'getAdmin';
+                        break;
+                    // 机构用户
+                    case 'orgUser':
+                        fn = 'getOrgUser';
+                        break;
+                    // 机构操作员
+                    case 'orgOperator':
+                        fn = 'getOrgOperator';
+                        break;
+                }
+                return fn;
+            };
+
+            $scope.active = 'all';
+            if ($rootScope.active) {
+                $scope.active = $rootScope.active;
+            }
+            $scope.keyword = '';
+
+            /**
+             * 修改分类
+             * @param value
+             */
+            $scope.setActive = function (value) {
+                if ($scope.active != value) {
+                    $scope.active = value;
+                    if ($scope.userParams.page() == 1)
+                        $scope.userParams.reload();
+                    else
+                        $scope.userParams.page(1);
+                }
+            };
+
+            $scope.reload = function() {
+                if ($scope.userParams.page() == 1)
+                    $scope.userParams.reload();
+                else
+                    $scope.userParams.page(1);
+            };
+
+            $scope.userParams = new ngTableParams({
+                page: 1,
+                count: 10,
+                sorting: {
+                    'userUU': 'asc'
+                }
+            }, {
+                total: 0,
+                counts: [],
+                getData: function ($defer, params) {
+                    $scope.loading = true;
+                    var pageParams = params.url();
+                    var realActive = {};
+                    pageParams.searchFilter = { // 筛选条件
+                        keyword: $scope.keyword
+                    };
+                    User[getState($scope.active)].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.userParams.page() == 1)
+                    $scope.userParams.reload();
+                else
+                    $scope.userParams.page(1);
+            };
+
+            var getNum = function() {
+                User.getUserNum({}, {}, function(data) {
+                    $scope.allUserNum = data.allUserNum;
+                    $scope.adminNum = data.adminNum;
+                    $scope.orgUserNum = data.orgUserNum;
+                    $scope.orgOperatorNum = data.orgOperatorNum;
+                });
+            };
+            getNum();
+
+            // 弹出详情页模态框
+            $scope.showDetail = function (user) {
+                var modalInstance = $modal.open({
+                    templateUrl: 'static/view/user/user_detail.html',
+                    controller: 'UserDetailCtrl',
+                    size: 'lg',
+                    resolve: {
+                        user: function () {
+                            return user;
+                        }
+                    }
+                });
+
+                modalInstance.result.then(function(data){
+                    $scope.userParams.reload();
+                }, function(){
+
+                });
+
+            };
+
+
+        }]);
+
+    /**
+     * 用户详情框
+     */
+    app.controller('UserDetailCtrl', ['$scope', 'User', 'toaster', '$modalInstance', 'BaseService', 'user', '$modal', 'ngTableParams',
+        function($scope, User, toaster, $modalInstance, BaseService, user, $modal, ngTableParams) {
+
+            $scope.active = 'project';
+            var getState = function(value) {
+                var fn = 'getJoinedProjectRecords';
+                switch (value) {
+                    case 'project' :
+                        fn = 'getJoinedProjectRecords';
+                        break;
+                    case 'activity' :
+                        fn = 'getJoinedActivityRecords';
+                        break;
+                }
+                return fn;
+            };
+
+            $scope.setActive = function(value) {
+                if ($scope.active != value) {
+                    $scope.active = value;
+                    if ($scope.tableParams.page !== 1) {
+                        $scope.tableParams.page(1);
+                    } else {
+                        $scope.tableParams.load();
+                    }
+                }
+            };
+
+            $scope.user = user;
+            var loadData = function() {
+                // 获取项目详情
+                User.getDetailByUserUU({userUU :user.userUU}, {}, function(data) {
+                    $scope.user = data;
+                }, function() {
+                    toaster.pop('error', '详情加载失败');
+                });
+            };
+
+            $scope.cancel= function() {
+                $modalInstance.dismiss();
+            };
+
+            $scope.tableParams = new ngTableParams({
+                page: 1,
+                count: 5,
+                sorting: {
+                    'id': 'desc'
+                }
+            }, {
+                total: 0,
+                counts: [],
+                getData: function ($defer, params) {
+                    $scope.loading = true;
+                    var pageParams = params.url();
+                    var realActive = {};
+                    pageParams.searchFilter = { // 筛选条件
+                        id: $scope.user.userUU,
+                        keyword: $scope.keyword
+                    };
+                    User[getState($scope.active)].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);
+                    });
+                }
+            });
+
+            // // true通过 false驳回
+            // $scope.auditOrg = function(type) {
             //     var modalInstance = $modal.open({
-            //         templateUrl: 'static/view/user/organization_detail.html',
-            //         controller: 'OrgDetailCtrl',
-            //         size: 'lg',
+            //         animation: true,
+            //         templateUrl: 'static/view/user/org_audit.html',
+            //         controller: 'OrgAuditCtrl',
             //         resolve: {
-            //             id: function () {
-            //                 return id;
+            //             org : function() {
+            //                 return $scope.org;
+            //             },
+            //             type : function() {
+            //                 return type;
             //             }
             //         }
             //     });
             //
             //     modalInstance.result.then(function(data){
-            //         if (data.success) {
-            //             toaster.pop('success', '操作成功');
-            //         }
-            //         $scope.orgParams.reload();
+            //         loadData();
+            //         $modalInstance.close(data);
             //     }, function(){
             //
             //     });
-            //
             // };
 
-
+            $scope.delete = function(id) {
+                User.delete({id: id}, {}, function(data) {
+                    if (data.success) {
+                        toaster.pop('success', data.success);
+                        $modalInstance.close(data);
+                    }
+                    if (data.error) {
+                        toaster.pop('error', data.error);
+                    }
+                });
+            };
         }]);
 
     return app;

+ 8 - 0
donate-console/src/main/webapp/resources/js/index/services/Organization.js

@@ -46,6 +46,14 @@ define ([ 'ngResource' ], function() {
             getOrgsNum: {
                 url: 'org/getOrgsNum',
                 method: 'GET'
+            },
+            // 删除机构信息(未通过)
+            delete: {
+                url: 'org/delete/:id',
+                method: 'DELETE',
+                params : {
+                    id: 'id'
+                }
             }
         });
     }]);

+ 47 - 0
donate-console/src/main/webapp/resources/js/index/services/User.js

@@ -0,0 +1,47 @@
+define ([ 'ngResource' ], function() {
+    angular.module('UserService', ['ngResource']).factory('User', ['$resource', function ($resource) {
+        return $resource ('user', {}, {
+            getAll : {
+
+            },
+            getAdmin: {
+                params : {
+                    _state: 'done'
+                }
+            },
+            getOrgUser: {
+                params : {
+                    _state: 'todo'
+                }
+            },
+            getOrgOperator: {
+                params : {
+                    _state: 'end'
+                }
+            },
+            // 获取用户详情
+            getDetailByUserUU: {
+                url: 'user/detail/:userUU',
+                method: 'GET',
+                params: {
+                    userUU: 'userUU'
+                }
+            },
+            // 获取各种类机构数目
+            getUserNum: {
+                url: 'user/getUserNum',
+                method: 'GET'
+            },
+            // 获取参加的项目记录
+            getJoinedProjectRecords : {
+                url: 'user/getJoinedProjectRecords',
+                method: 'GET'
+            },
+            // 获取参加的活动记录
+            getJoinedActivityRecords : {
+                url: 'user/getJoinedActivityRecords',
+                method: 'GET'
+            }
+        });
+    }]);
+});

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

@@ -749,6 +749,7 @@
                             <option ng-value="'疾病援助'">疾病援助</option>
                             <option ng-value="'扶贫/救灾'">扶贫/救灾</option>
                             <option ng-value="'教育/助学'">教育/助学</option>
+                            <option ng-value="'其他'">其他</option>
                         </select>
                     </div>
                 </div>

+ 4 - 4
donate-console/src/main/webapp/resources/view/user/organization_detail.html

@@ -1,11 +1,11 @@
 <aside class="content-right">
     <!--<div class="container">-->
     <div class="right-header clearfix">
-        <div class="fl"><span ng-bind="org.name"></span></div>
+        <div class="fl"><span ng-bind="org.name"></span><a ng-click="delete(org.id)">删除</a></div>
         <div class="fr close" ng-click="cancel()">&times;</div>
     </div>
     <!--驳回理由-->
-    <div class="reject-reason" ng-show="org.status == 2">
+    <div class="reject-reason" ng-if="org.status == 2">
         <h5>驳回理由</h5>
         <!--<p>1、机构logo不清晰</p>-->
         <!--<p>2、慈善组织公开募捐资格证书未上传</p>-->
@@ -84,8 +84,8 @@
             </div>
         </div>
         <div class="list-footer">
-            <a ng-click="auditOrg(true)">通过</a>
-            <a ng-click="auditOrg(false)">驳回</a>
+            <a ng-if="org.status == 0" ng-click="auditOrg(true)">通过</a>
+            <a ng-if="org.status == 0" ng-click="auditOrg(false)">驳回</a>
         </div>
     </div>
     <!--联系人-->

+ 18 - 32
donate-console/src/main/webapp/resources/view/user/organization_list.html

@@ -505,13 +505,12 @@
                 </select>
             </div>
             <div class="jp-left">
-                <select class="form-control input-sm jp-width120" ng-model="selectedArea" ng-change="reload()" ng-init="selectedArea = '0'">
-                    <option value="0">全部</option>
-                    <option value="1">环保/保护动物</option>
-                    <option value="2">疾病救助</option>
-                    <option value="3">扶贫/救灾</option>
-                    <option value="4">教育/助学</option>
-                    <option value="5">其他</option>
+                <select class="form-control input-sm jp-width120" ng-model="selectedArea" ng-change="reload()"  ng-options="area for area in areas" ng-init="selectedArea = '全部'">
+                    <!--<option value="1">环保/保护动物</option>-->
+                    <!--<option value="2">疾病救助</option>-->
+                    <!--<option value="3">扶贫/救灾</option>-->
+                    <!--<option value="4">教育/助学</option>-->
+                    <!--<option value="5">其他</option>-->
                 </select>
             </div>
         </div>
@@ -538,46 +537,33 @@
                             <td width="450" ng-if="active != 'unaudited'"></td>
                         </tr>
                         </thead>
-                        <!--<tbody>-->
-                        <!--<tr>-->
-                            <!--<td></td>-->
-                            <!--<td>-->
-                                <!--<div ng-click="showDetail(1)" class="name">-->
-                                    <!--<p>吉林省青少年发展基金会</p>-->
-                                    <!--&lt;!&ndash;<div><span>编辑</span></div>&ndash;&gt;-->
-                                <!--</div>-->
-                            <!--</td>-->
-                            <!--<td>U126165</td>-->
-                            <!--<td>教育/助学</td>-->
-                            <!--<td>吉林 长春</td>-->
-                            <!--<td>公募机构</td>-->
-                            <!--<td>243人</td>-->
-                            <!--<td></td>-->
-                        <!--</tr>-->
-                        <!--</tbody>-->
                         <tbody ng-repeat="org in $data">
-                        <tr>
+                        <tr ng-click="showDetail(org.id)" title="查看详情">
                             <td></td>
                             <td>
                                 <div class="name">
                                     <p>{{org.name}}</p>
-                                    <!--<div><span>编辑</span></div>-->
+                                    <!--<div>-->
+                                        <!--<a ng-if="org.status == 0" ng-click="auditOrg(org, true)">通过</a>-->
+                                        <!--<a ng-if="org.status == 0" ng-click="auditOrg(org, false)">驳回</a>-->
+                                    <!--</div>-->
                                 </div>
                             </td>
                             <td>{{org.uuid}}</td>
                             <td>
-                                <span ng-if="org.majorArea == 1">环保/保护动物</span>
-                                <span ng-if="org.majorArea == 2">疾病救助</span>
-                                <span ng-if="org.majorArea == 3">扶贫/救灾</span>
-                                <span ng-if="org.majorArea == 4">教育/助学</span>
-                                <span ng-if="org.majorArea == 5">其他</span>
+                                <!--<span ng-if="org.majorArea == 1">环保/保护动物</span>-->
+                                <!--<span ng-if="org.majorArea == 2">疾病救助</span>-->
+                                <!--<span ng-if="org.majorArea == 3">扶贫/救灾</span>-->
+                                <!--<span ng-if="org.majorArea == 4">教育/助学</span>-->
+                                <!--<span ng-if="org.majorArea == 5">其他</span>-->
+                                <span ng-bind="org.majorArea"></span>
                             </td>
                             <td>{{org.province}}&nbsp;{{org.city}}</td>
                             <td>
                                 <span ng-if="org.type == 1">公募</span>
                                 <span ng-if="org.type == 2">非公募</span>
                             </td>
-                            <td>{{org.fullTimePopulation + org.partTimePopulation + org.voluntaryPopulation | number}}人</td>
+                            <td>{{org.fullTimePopulation + org.partTimePopulation + org.voluntaryPopulation || 0 | number}}人</td>
                             <td ng-if="active == 'unaudited'">
                                 {{org.submitTime | date : 'yyyy-MM-dd'}}
                             </td>

+ 173 - 0
donate-console/src/main/webapp/resources/view/user/user_detail.html

@@ -0,0 +1,173 @@
+<!--右侧内容部分-->
+<aside class="content-right">
+    <!--<div class="container">-->
+    <div class="right-header clearfix">
+        <!-- 编辑暂时隐藏 -->
+        <div class="fl"><span ng-bind="user.name"></span><!--<a ng-click="editUser(user)">编辑</a>--></div>
+        <div class="fr close" ng-click="cancel()">&times;</div>
+    </div>
+    <div class="right-nav"><span class="active">用户信息</span><span ng-click="setActive('project')">参与项目</span><span ng-click="setActive('activity')">参与活动</span></div>
+    <!--用户信息-->
+    <div class="right-list show">
+        <div class="list-message">
+            <div class="list-header">
+                <span>基本信息</span>
+            </div>
+            <div class="list-body clearfix">
+                <div class="msg-list fl">
+                    <span class="fl">优软账号</span>
+                    <span class="fl" ng-bind="user.userUU"></span>
+                </div>
+                <!--<div class="msg-list fl">-->
+                    <!--<span class="fl">身份证号</span>-->
+                    <!--<span class="fl">456194689162198465</span>-->
+                <!--</div>-->
+                <div class="msg-list fl" ng-if="user.org">
+                    <span class="fl">所在地</span>
+                    <span class="fl">{{user.org.province}}&nbsp;&nbsp;{{user.org.city}}</span>
+                </div>
+                <div class="msg-list fl" ng-if="user.org">
+                    <span class="fl">详细地址</span>
+                    <span class="fl">{{user.org.address}}</span>
+                </div>
+                <div class="msg-list fl" ng-if="user.org">
+                    <span class="fl">工作单位</span>
+                    <span class="fl">{{user.org.name}}</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">个人手机</span>
+                    <span class="fl">{{user.tel || '无'}}</span>
+                </div>
+                <div class="msg-list fl"  ng-if="user.type">
+                    <span class="fl">用户权限</span>
+                    <span class="fl">{{user.type}}</span>
+                </div>
+            </div>
+        </div>
+        <div class="list-message" ng-if="user.org">
+            <div class="list-header">
+                <span>银行信息</span>
+            </div>
+            <div class="list-body clearfix">
+                <div class="msg-list fl">
+                    <span class="fl">开户支行</span>
+                    <span class="fl">{{user.org.cardOfBank}}&nbsp;&nbsp;{{user.org.branchMessage}}</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">银行账号</span>
+                    <span class="fl">{{user.org.account}}</span>
+                </div>
+            </div>
+        </div>
+        <div class="list-message">
+            <div class="list-header">
+                <span>募捐信息</span>
+            </div>
+            <div class="list-body clearfix">
+                <div class="msg-list fl">
+                    <span class="fl">参加项目</span>
+                    <span class="fl">{{user.times || 0 | number}}次</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">捐赠善款</span>
+                    <span class="fl">{{user.donation || 0 | number:2}}元</span>
+                </div>
+                <div class="msg-list fl">
+                    <span class="fl">参加活动</span>
+                    <span class="fl">{{user.actTimes || 0 | number}}个</span>
+                </div>
+            </div>
+        </div>
+    </div>
+    <!--参与项目-->
+    <div class="right-list">
+        <table ng-table="tableParams">
+            <thead>
+            <tr>
+                <th width="30"></th>
+                <th width="210">项目名称</th>
+                <th width="120">捐款金额(元)</th>
+                <th width="120">捐款时间</th>
+                <th width="120">捐款方式</th>
+                <th width="240"></th>
+            </tr>
+            </thead>
+            <tbody ng-if="tableParams.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="projectRecord in $data">
+            <tr>
+                <td></td>
+                <td>{{projectRecord.project.name}}</td>
+                <td>{{projectRecord.amount || 0 | number:2}}</td>
+                <td>{{projectRecord.time | date:'yyyy-MM-dd HH:mm:ss'}}</td>
+                <td>{{projectRecord.way}}</td>
+                <td></td>
+            </tr>
+            </tbody>
+        </table>
+    </div>
+    <!--参与活动-->
+    <div class="right-list" ng-if = "active == 'activity'">
+        <table ng-table="tableParams">
+            <thead>
+            <tr>
+                <th width="30"></th>
+                <th width="210">活动名称</th>
+                <th width="120">活动时间</th>
+                <th width="120">参与时间</th>
+                <th width="350"></th>
+            </tr>
+            </thead>
+            <tbody ng-if="tableParams.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="activityRecord in $data">
+            <tr>
+                <td></td>
+                <td>{{activityRecord.activity.name}}</td>
+                <td>{{activityRecord.activity.startTime | date:'yyyy-MM-dd'}}<br/>至{{activityRecord.activity.endTime | date:'yyyy-MM-dd'}}</td>
+                <td>{{activityRecord.joinedTime | date: 'yyyy-MM-dd HH:mm:ss'}}</td>
+                <td></td>
+            </tr>
+            </tbody>
+        </table>
+    </div>
+</aside>
+<script>
+
+    $('.all').on('click', 'span', function () {
+        var index = $(this).index();
+        $(this).addClass('active').siblings().removeClass('active');
+        $('.boxes').eq(index).addClass('show').siblings().removeClass('show');
+    });
+    $('.right-nav').on('click', 'span', function () {
+        var index = $(this).index();
+//        console.log(index)
+        $(this).addClass('active').siblings().removeClass('active');
+        $('.right-list').eq(index).addClass('show').siblings().removeClass('show');
+//        console.log($('.right-list').eq(index))
+    });
+</script>

+ 90 - 0
donate-console/src/main/webapp/resources/view/user/user_edit.html

@@ -0,0 +1,90 @@
+<!--用户信息编辑弹出框-->
+<div class="userMsg modal" role='dialog' id='userMsg'>
+    <div class="modal-dialog">
+        <div class="modal-content">
+            <div class="header modal-header clearfix">
+                <p class="fl">用户信息编辑</p>
+                <div class="close fr" data-dismiss="modal">&times;</div>
+            </div>
+            <div class="body modal-body">
+                <form action="">
+                    <div class="form-group clearfix">
+                        <label for="" class="control-label fl">真实姓名</label>
+                        <input type="text" class="form-control fl"/>
+                    </div>
+                    <div class="form-group clearfix">
+                        <label for="" class="control-label fl">优软账号</label>
+                        <input type="text" class="form-control fl"/>
+                    </div>
+                    <div class="form-group clearfix">
+                        <label for="" class="control-label fl">身份证号</label>
+                        <input type="text" class="form-control fl"/>
+                    </div>
+                    <div class="form-group clearfix">
+                        <label for="" class="control-label fl">所在地</label>
+                        <div class="fl">
+                            <select name="" id="" class="form-control fl province">
+                                <option value="">陕西</option>
+                            </select>
+                            <select name="" id="" class="form-control fl city">
+                                <option value="">西安</option>
+                            </select>
+                        </div>
+                    </div>
+                    <div class="form-group clearfix">
+                        <label for="" class="control-label fl">详细地址</label>
+                        <input type="text" class="form-control fl"/>
+                    </div>
+                    <div class="form-group clearfix">
+                        <label for="" class="control-label fl">工作单位</label>
+                        <input type="text" class="form-control fl"/>
+                    </div>
+                    <div class="form-group clearfix">
+                        <label for="" class="control-label fl">个人手机</label>
+                        <input type="text" class="form-control fl"/>
+                    </div>
+                    <div class="form-group clearfix">
+                        <label for="" class="control-label fl">用户权限</label>
+                        <input type="text" class="form-control fl"/>
+                    </div>
+                </form>
+                <div class="info">
+                    <span>银行信息</span>
+                </div>
+                <form action="">
+                    <div class="form-group clearfix">
+                        <label for="" class="control-label fl">开户支行</label>
+                        <div class="fl">
+                            <select name="" id="" class="form-control fl province">
+                                <option value="">平安银行</option>
+                            </select>
+                            <input type="text" class="form-control fl bank">
+                        </div>
+                    </div>
+                    <div class="form-group clearfix">
+                        <label for="" class="control-label fl">银行账号</label>
+                        <input type="text" class="form-control fl"/>
+                    </div>
+                </form>
+            </div>
+            <div class="footer modal-footer text-right">
+                <a href="">确认</a><a href="">取消</a>
+            </div>
+        </div>
+    </div>
+</div>
+<script>
+
+    $('.all').on('click', 'span', function () {
+        var index = $(this).index();
+        $(this).addClass('active').siblings().removeClass('active');
+        $('.boxes').eq(index).addClass('show').siblings().removeClass('show');
+    });
+    $('.right-nav').on('click', 'span', function () {
+        var index = $(this).index();
+//        console.log(index)
+        $(this).addClass('active').siblings().removeClass('active');
+        $('.right-list').eq(index).addClass('show').siblings().removeClass('show');
+//        console.log($('.right-list').eq(index))
+    });
+</script>

+ 30 - 404
donate-console/src/main/webapp/resources/view/user/user_list.html

@@ -134,13 +134,13 @@
         right: 0;
         /*width: 50%;*/
         width: 905px;
-        height: 924px;
+        height: 600px;
         background: #fff;
         z-index: 100;
-        box-shadow: -5px 2px 2px #f0f0f0;
-        -moz-box-shadow: -5px 2px 2px #f0f0f0;
-        -o-box-shadow: -5px 2px 2px #f0f0f0;
-        -webkit-box-shadow: -5px 2px 2px #f0f0f0 ;
+        /*box-shadow: -5px 2px 2px #f0f0f0;*/
+        /*-moz-box-shadow: -5px 2px 2px #f0f0f0;*/
+        /*-o-box-shadow: -5px 2px 2px #f0f0f0;*/
+        /*-webkit-box-shadow: -5px 2px 2px #f0f0f0 ;*/
     }
     .right-header{
         padding: 0 25px;
@@ -276,9 +276,6 @@
         font-size: 14px;
         color: #323232;
     }
-    .content-right{
-        display: none;
-    }
     .right-list{
         display: none
     }
@@ -400,30 +397,24 @@
         padding: 10px;
     }
 </style>
-<body class="skin-blue sidebar-mini  pace-done">
-<div class="pace  pace-inactive">
-    <div class="pace-progress" data-progress-text="100%" data-progress="99" style="transform: translate3d(100%, 0px, 0px);">
-        <div class="pace-progress-inner"></div>
-    </div>
-    <div class="pace-activity"></div>
-</div>
+<!-- loading start -->
+<div class="loading in" ng-class="{'in': loading}"><i></i></div>
+<!-- loading end -->
 <div class="wrapper">
     <!--主体内容-->
     <div class="content-wrapper" style="min-height: 924px; z-index: 50;">
         <section class="content-header clearfix">
             <h1>用户列表</h1>
             <div class="all">
-                <span class="active">全部用户<em>(182211)</em><b class="line"></b></span>
-                <span>管理员<em>(12)</em><b class="line"></b></span>
-                <span>机构用户<em>(15172)</em><b class="line"></b></span>
-                <span>机构操作员<em>(118)</em></span>
+                <span class="active" ng-click="setActive('all')">全部用户<em>({{allUserNum | number}})</em><b class="line"></b></span>
+                <span ng-click="setActive('admin')">管理员<em>({{adminNum | number}})</em><b class="line"></b></span>
+                <span ng-click="setActive('orgUser')">机构用户<em>({{orgUserNum | number}})</em><b class="line"></b></span>
+                <span ng-click="setActive('orgOperator')">机构操作员<em>({{orgOperatorNum | number}})</em></span>
+            </div>
+            <div class="input-group input-group-sm">
+                <input id="post-search-input" class="form-control" type="search" ng-model="keyword" ng-search="onSearch()" value="" name="" placeholder="请输入关键词">&nbsp;&nbsp;
+                <input id="search-submit" class="btn btn-default btn-sm" type="button" value="搜索" ng-click="onSearch()">
             </div>
-            <form class="form-horizontal" method="POST" action="">
-                <div class="input-group input-group-sm">
-                    <input id="post-search-input" class="form-control" type="search" value="" name="" placeholder="请输入关键词">&nbsp;&nbsp;
-                    <input id="search-submit" class="btn btn-default btn-sm" type="submit" value="搜索">
-                </div>
-            </form>
         </section>
         <!-- Main content -->
         <section class="content">
@@ -432,162 +423,37 @@
                 <div class="boxes-body">
                     <form action="" method="" id="form">
                         <input type="hidden" name="" value="">
-                        <table class="" style="word-break:break-all">
+                        <table class="" style="word-break:break-all" ng-table="userParams">
                             <thead>
                             <tr>
                                 <td width="45"></td>
                                 <td width="140">用户姓名</td>
                                 <td width="170">优软账号</td>
-                                <td width="240">工作单位</td>
+                                <td width="240">所属机构</td>
                                 <td width="180">常驻地址</td>
-                                <td width="180">参加项目数</td>
+                                <td width="180">参加项目数</td>
                                 <td width="160">捐赠善款</td>
                                 <td width="160">个人电话</td>
+                                <td width="160" ng-if="active != 'all' && active != 'admin'">用户权限</td>
                                 <td width="300"></td>
                             </tr>
                             </thead>
-                            <tbody>
-                            <tr>
-                                <td><input type="checkbox"></td>
-                                <td>
-                                    <div class="name">
-                                        <p>钟勇斌</p>
-                                        <!--<div><span>编辑</span><span>删除</span></div>-->
-                                    </div>
-                                </td>
-                                <td>U126165</td>
-                                <td>深圳市优软科技有限公司</td>
-                                <td>吉林 长春</td>
-                                <td>8</td>
-                                <td>112.00</td>
-                                <td>13222222222</td>
+                            <tbody ng-repeat="user in $data">
+                            <tr ng-click="showDetail(user)" title="点击查看详情">
                                 <td></td>
-                            </tr>
-                            </tbody>
-                        </table>
-                    </form>
-                </div>
-            </div>
-            <!--管理员-->
-            <div class="boxes">
-                <div class="boxes-body">
-                    <form action="" method="" id="form">
-                        <input type="hidden" name="" value="">
-                        <table class="" style="word-break:break-all">
-                            <thead>
-                            <tr>
-                                <td width="45"></td>
-                                <td width="140">用户姓名</td>
-                                <td width="170">优软账号</td>
-                                <td width="240">工作单位</td>
-                                <td width="180">常驻地址</td>
-                                <td width="180">参加项目数</td>
-                                <td width="160">捐赠善款</td>
-                                <td width="160">个人电话</td>
-                                <td width="300"></td>
-                            </tr>
-                            </thead>
-                            <tbody>
-                            <tr>
-                                <td><input type="checkbox"></td>
                                 <td>
                                     <div class="name">
-                                        <p>钟勇斌</p>
+                                        <p>{{user.name}}</p>
                                         <!--<div><span>编辑</span><span>删除</span></div>-->
                                     </div>
                                 </td>
-                                <td>U126165</td>
-                                <td>深圳市优软科技有限公司</td>
-                                <td>吉林 长春</td>
-                                <td>8</td>
-                                <td>112.00</td>
-                                <td>13222222222</td>
-                                <td></td>
-                            </tr>
-                            </tbody>
-                        </table>
-                    </form>
-                </div>
-            </div>
-            <!--机构用户-->
-            <div class="boxes">
-                <div class="boxes-body">
-                    <form action="" method="" id="form">
-                        <input type="hidden" name="" value="">
-                        <table class="" style="word-break:break-all">
-                            <thead>
-                            <tr>
-                                <td width="45"></td>
-                                <td width="140">用户姓名</td>
-                                <td width="170">优软账号</td>
-                                <td width="240">工作单位</td>
-                                <td width="180">常驻地址</td>
-                                <td width="180">参加项目数</td>
-                                <td width="160">捐赠善款</td>
-                                <td width="160">个人电话</td>
-                                <td width="160">用户权限</td>
-                                <td width="170"></td>
-                            </tr>
-                            </thead>
-                            <tbody>
-                            <tr>
-                                <td><input type="checkbox"></td>
-                                <td>
-                                    <div class="name">
-                                        <p>钟勇斌</p>
-                                        <!--<div><span>编辑</span><span>删除</span></div>-->
-                                    </div>
-                                </td>
-                                <td>U126165</td>
-                                <td>深圳市优软科技有限公司</td>
-                                <td>吉林 长春</td>
-                                <td>8</td>
-                                <td>112.00</td>
-                                <td>13222222222</td>
-                                <td>操作人</td>
-                                <td></td>
-                            </tr>
-                            </tbody>
-                        </table>
-                    </form>
-                </div>
-            </div>
-            <!--机构操作员-->
-            <div class="boxes">
-                <div class="boxes-body">
-                    <form action="" method="" id="form">
-                        <input type="hidden" name="" value="">
-                        <table class="" style="word-break:break-all">
-                            <thead>
-                            <tr>
-                                <td width="45"></td>
-                                <td width="140">用户姓名</td>
-                                <td width="170">优软账号</td>
-                                <td width="240">工作单位</td>
-                                <td width="180">常驻地址</td>
-                                <td width="180">参加项目数</td>
-                                <td width="160">捐赠善款</td>
-                                <td width="160">个人电话</td>
-                                <td width="160">用户权限</td>
-                                <td width="170"></td>
-                            </tr>
-                            </thead>
-                            <tbody>
-                            <tr>
-                                <td><input type="checkbox"></td>
-                                <td>
-                                    <div class="name">
-                                        <p>钟勇斌</p>
-                                        <!--<div><span>编辑</span><span>删除</span></div>-->
-                                    </div>
-                                </td>
-                                <td>U126165</td>
-                                <td>深圳市优软科技有限公司</td>
-                                <td>吉林 长春</td>
-                                <td>8</td>
-                                <td>112.00</td>
-                                <td>13222222222</td>
-                                <td>操作人</td>
+                                <td>{{user.userUU}}</td>
+                                <td>{{user.org.name || ''}}</td>
+                                <td>{{user.org.province}}&nbsp;&nbsp;{{user.org.city}}</td>
+                                <td>{{user.times || 0 | number}}</td>
+                                <td>{{user.donation || 0 | number:2}}</td>
+                                <td>{{user.tel}}</td>
+                                <td ng-if="active != 'all' && active != 'admin'">{{user.type}}</td>
                                 <td></td>
                             </tr>
                             </tbody>
@@ -597,247 +463,7 @@
             </div>
         </section>
     </div>
-    <!--右侧内容部分-->
-    <aside class="content-right">
-        <!--<div class="container">-->
-        <div class="right-header clearfix">
-            <div class="fl"><span>钟勇斌</span><a href="" data-toggle="modal" data-target="#userMsg">编辑</a></div>
-            <div class="fr close">&times;</div>
-        </div>
-        <div class="right-nav"><span class="active">用户信息</span><span>参与项目</span><span>参与活动</span></div>
-        <!--用户信息-->
-        <div class="right-list show">
-            <div class="list-message">
-                <div class="list-header">
-                    <span>基本信息</span>
-                </div>
-                <div class="list-body clearfix">
-                    <div class="msg-list fl">
-                        <span class="fl">优软账号</span>
-                        <span class="fl">13800001111</span>
-                    </div>
-                    <div class="msg-list fl">
-                        <span class="fl">身份证号</span>
-                        <span class="fl">456194689162198465</span>
-                    </div>
-                    <div class="msg-list fl">
-                        <span class="fl">所在地</span>
-                        <span class="fl">广东 深圳</span>
-                    </div>
-                    <div class="msg-list fl">
-                        <span class="fl">详细地址</span>
-                        <span class="fl">南山区高新技术产业园科技南五路英唐大厦6楼</span>
-                    </div>
-                    <div class="msg-list fl">
-                        <span class="fl">工作单位</span>
-                        <span class="fl">深圳市优软科技有限公司</span>
-                    </div>
-                    <div class="msg-list fl">
-                        <span class="fl">个人手机</span>
-                        <span class="fl">456194689162198465</span>
-                    </div>
-                    <div class="msg-list fl">
-                        <span class="fl">用户权限</span>
-                        <span class="fl">个人用户</span>
-                    </div>
-                </div>
-            </div>
-            <div class="list-message">
-                <div class="list-header">
-                    <span>银行信息</span>
-                </div>
-                <div class="list-body clearfix">
-                    <div class="msg-list fl">
-                        <span class="fl">开户支行</span>
-                        <span class="fl">招商银行 蛇口支行</span>
-                    </div>
-                    <div class="msg-list fl">
-                        <span class="fl">银行账号</span>
-                        <span class="fl">456194689162198465</span>
-                    </div>
-                </div>
-            </div>
-            <div class="list-message">
-                <div class="list-header">
-                    <span>募捐信息</span>
-                </div>
-                <div class="list-body clearfix">
-                    <div class="msg-list fl">
-                        <span class="fl">参加项目</span>
-                        <span class="fl">8个</span>
-                    </div>
-                    <div class="msg-list fl">
-                        <span class="fl">捐赠善款</span>
-                        <span class="fl">15616.00元</span>
-                    </div>
-                    <div class="msg-list fl">
-                        <span class="fl">参加活动</span>
-                        <span class="fl">2个</span>
-                    </div>
-                </div>
-            </div>
-        </div>
-        <!--参与项目-->
-        <div class="right-list">
-            <table>
-                <thead>
-                <tr>
-                    <th width="30"></th>
-                    <th width="210">项目名称</th>
-                    <th width="120">捐款金额(元)</th>
-                    <th width="120">捐款时间</th>
-                    <th width="120">捐款方式</th>
-                    <th width="240"></th>
-                </tr>
-                </thead>
-                <tbody>
-                <tr>
-                    <td></td>
-                    <td>让寒门学子多回趟家</td>
-                    <td>1.00</td>
-                    <td>2017-08-20 14:23:11</td>
-                    <td>微信支付</td>
-                    <td></td>
-                </tr>
-                <tr>
-                    <td></td>
-                    <td>让寒门学子多回趟家</td>
-                    <td>1.00</td>
-                    <td>2017-08-20 14:23:11</td>
-                    <td>微信支付</td>
-                    <td></td>
-                </tr>
-                <tr>
-                    <td></td>
-                    <td>让寒门学子多回趟家</td>
-                    <td>1.00</td>
-                    <td>2017-08-20 14:23:11</td>
-                    <td>微信支付</td>
-                    <td></td>
-                </tr>
-                <tr>
-                    <td></td>
-                    <td>让寒门学子多回趟家</td>
-                    <td>1.00</td>
-                    <td>2017-08-20 14:23:11</td>
-                    <td>微信支付</td>
-                    <td></td>
-                </tr>
-                </tbody>
-            </table>
-        </div>
-        <!--参与活动-->
-        <div class="right-list">
-            <table>
-                <thead>
-                <tr>
-                    <th width="30"></th>
-                    <th width="210">活动名称</th>
-                    <th width="120">活动时间</th>
-                    <th width="120">参与时间</th>
-                    <th width="350"></th>
-                </tr>
-                </thead>
-                <tbody>
-                <tr>
-                    <td></td>
-                    <td>优软一元捐感恩回馈01</td>
-                    <td>2017-08-20<br/>至2017-09-20</td>
-                    <td>2017-08-20 14:23:11</td>
-                    <td></td>
-                </tr>
-                <tr>
-                    <td></td>
-                    <td>优软一元捐感恩回馈01</td>
-                    <td>2017-08-20<br/>至2017-09-20</td>
-                    <td>2017-08-20 14:23:11</td>
-                    <td></td>
-                </tr>
-                </tbody>
-            </table>
-        </div>
-        <!--</div>-->
-    </aside>
-</div>
-<!--用户信息编辑弹出框-->
-<div class="userMsg modal" role='dialog' id='userMsg'>
-    <div class="modal-dialog">
-        <div class="modal-content">
-            <div class="header modal-header clearfix">
-                <p class="fl">用户信息编辑</p>
-                <div class="close fr" data-dismiss="modal">&times;</div>
-            </div>
-            <div class="body modal-body">
-                <form action="">
-                    <div class="form-group clearfix">
-                        <label for="" class="control-label fl">真实姓名</label>
-                        <input type="text" class="form-control fl"/>
-                    </div>
-                    <div class="form-group clearfix">
-                        <label for="" class="control-label fl">优软账号</label>
-                        <input type="text" class="form-control fl"/>
-                    </div>
-                    <div class="form-group clearfix">
-                        <label for="" class="control-label fl">身份证号</label>
-                        <input type="text" class="form-control fl"/>
-                    </div>
-                    <div class="form-group clearfix">
-                        <label for="" class="control-label fl">所在地</label>
-                        <div class="fl">
-                            <select name="" id="" class="form-control fl province">
-                                <option value="">陕西</option>
-                            </select>
-                            <select name="" id="" class="form-control fl city">
-                                <option value="">西安</option>
-                            </select>
-                        </div>
-                    </div>
-                    <div class="form-group clearfix">
-                        <label for="" class="control-label fl">详细地址</label>
-                        <input type="text" class="form-control fl"/>
-                    </div>
-                    <div class="form-group clearfix">
-                        <label for="" class="control-label fl">工作单位</label>
-                        <input type="text" class="form-control fl"/>
-                    </div>
-                    <div class="form-group clearfix">
-                        <label for="" class="control-label fl">个人手机</label>
-                        <input type="text" class="form-control fl"/>
-                    </div>
-                    <div class="form-group clearfix">
-                        <label for="" class="control-label fl">用户权限</label>
-                        <input type="text" class="form-control fl"/>
-                    </div>
-                </form>
-                <div class="info">
-                    <span>银行信息</span>
-                </div>
-                <form action="">
-                    <div class="form-group clearfix">
-                        <label for="" class="control-label fl">开户支行</label>
-                        <div class="fl">
-                            <select name="" id="" class="form-control fl province">
-                                <option value="">平安银行</option>
-                            </select>
-                            <input type="text" class="form-control fl bank">
-                        </div>
-                    </div>
-                    <div class="form-group clearfix">
-                        <label for="" class="control-label fl">银行账号</label>
-                        <input type="text" class="form-control fl"/>
-                    </div>
-                </form>
-            </div>
-            <div class="footer modal-footer text-right">
-                <a href="">确认</a><a href="">取消</a>
-            </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 src="static/lib/js/app.min.js"></script>
 <script>
     $('.all').on('click', 'span', function () {
         var index = $(this).index();

+ 0 - 10
donate-service/src/main/java/com/uas/service/donate/controller/ActivityRecodeController.java

@@ -32,16 +32,6 @@ public class ActivityRecodeController {
       return activityRecodeService.join(activityId,uuid);
     }
 
-    /**
-     *查询某一用户参加过的活动
-     */
-    @ResponseBody
-    @RequestMapping(value = "/queryOne",method = RequestMethod.GET)
-    public List<ActivityRecode> queryOne(Long uuid){
-        return activityRecodeService.queryOne(uuid);
-    }
-
-
     /**
      * 查询某一活动参与者
      * @param activityId

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

@@ -19,6 +19,7 @@ import com.alipay.api.response.AlipayUserInfoShareResponse;
 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.model.*;
 import com.uas.service.donate.service.*;
 import com.uas.service.donate.util.StringUtils;
@@ -65,6 +66,9 @@ public class AlipayController {
     @Autowired
     private ActivityRecodeService activityRecodeService;
 
+    @Autowired
+    private UserDao userDao;
+
     private Logger logger = LoggerFactory.getLogger(AlipayController.class);
 
     //private AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.SB_GATEWAY,AlipayConfig.SB_APPID,AlipayConfig.SB_RSA_PRIVATE_KEY,AlipayConfig.FORMAT,AlipayConfig.CHARSET,AlipayConfig.SB_ALIPAY_PUBLIC_KEY,AlipayConfig.SIGNTYPE);
@@ -324,6 +328,13 @@ public class AlipayController {
                                             projectService.save(project);
                                             logger.info("更新项目,更新了项目id为" + project.getId() + ",项目名称为"
                                                     + project.getName()+ "的参数人数和金额" + ",当前参与人数为" + project.getJoinAmount() + ",当前已筹集的金额" + project.getTotalAmount());
+                                            // 捐款完成之后,把捐款信息统计到用户信息中
+                                            if (SystemSession.getUser() != null) {
+                                                User user = userDao.findOne(SystemSession.getUser().getUserUU());
+                                                user.setTimes((user.getTimes() != null ? user.getTimes() : 0) + 1);
+                                                user.setDonation((user.getDonation() != null ? user.getDonation() : 0) + projectRecode.getAmount());
+                                                userDao.save(user);
+                                            }
                                         }
 
                                         //交易支付成功 注:付款完成后,支付宝系统发送该交易状态通知

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

@@ -296,7 +296,7 @@ public class ProjectController{
     /**
      *找到某项目的关联活动
      */
-    @RequestMapping(value = "/getJoinedActivity/{id}",method = RequestMethod.GET)
+    @RequestMapping(value = "/getJoinedActivity/{id}", method = RequestMethod.GET)
     @ResponseBody
     public ModelMap getJoinedActivity(@PathVariable("id") Long id){
         return new ModelMap("activity", projectService.getJoinedActivity(id));
@@ -304,11 +304,11 @@ public class ProjectController{
 
     /**
      * 捐款完毕页面注册完毕后,将uu写入捐款记录,并参与相关活动
-     * @param projectRecodeId
-     * @param userUU
+     * @param projectRecodeId 项目参与记录id
+     * @param userUU  用户UU
      * @return
      */
-    @RequestMapping(value = "/joinAfterDonate",method = RequestMethod.POST)
+    @RequestMapping(value = "/joinAfterDonate", method = RequestMethod.POST)
     @ResponseBody
     public ModelMap joinAfterDonate(Long projectRecodeId, Long userUU){
         return  projectService.joinAfterDonate(projectRecodeId, userUU);

+ 0 - 10
donate-service/src/main/java/com/uas/service/donate/controller/ProjectRecodeController.java

@@ -23,16 +23,6 @@ public class ProjectRecodeController {
     @Autowired
     private ProjectService projectService;
 
-    /**
-     * 查询某人参加过捐款的所有项目
-     * @param uuid
-     * @return
-     */
-    @ResponseBody
-    @RequestMapping(value = "/joins",method = RequestMethod.GET)
-    public List<ProjectRecode> joins(Long uuid){
-        return projectRecodeService.findByuuid(uuid);
-    }
 
     /**
      * 参与捐款,重新设置项目捐款总额

+ 36 - 2
donate-service/src/main/java/com/uas/service/donate/controller/UserController.java

@@ -1,7 +1,14 @@
 package com.uas.service.donate.controller;
 
+import com.alibaba.fastjson.JSONObject;
+import com.uas.platform.core.model.PageInfo;
+import com.uas.platform.core.model.PageParams;
+import com.uas.service.donate.model.ActivityRecode;
+import com.uas.service.donate.model.ProjectRecode;
+import com.uas.service.donate.model.SearchFilter;
 import com.uas.service.donate.service.UserService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -37,14 +44,41 @@ public class UserController {
         return map;
     }
 
+    /**
+     * 获取已参与项目
+     * @param params 分页参数
+     * @param searchFilter 查找filter
+     * @return 用户分页
+     */
+    @RequestMapping(value = "/getJoinedProjectRecords", method = RequestMethod.GET)
+    @ResponseBody
+    public Page<ProjectRecode> getJoinedProjectRecords(PageParams params, String searchFilter) {
+        PageInfo pageInfo = new PageInfo(params);
+        SearchFilter filter = JSONObject.parseObject(searchFilter, SearchFilter.class);
+        return userService.getJoinedProjectRecords(pageInfo, filter);
+    }
+
+    /**
+     * 获取已参与活动
+     * @param params 分页参数
+     * @param searchFilter 查找filter
+     * @return 用户分页
+     */
+    @RequestMapping(value = "/getJoinedActivityRecords", method = RequestMethod.GET)
+    @ResponseBody
+    public Page<ActivityRecode> getJoinedActivityRecords(PageParams params, String searchFilter) {
+        PageInfo pageInfo = new PageInfo(params);
+        SearchFilter filter = JSONObject.parseObject(searchFilter, SearchFilter.class);
+        return userService.getJoinedActivityRecords(pageInfo, filter);
+    }
 
-//TODO message
+//    // TODO message
 //    @RequestMapping(value = "/getMessage", method = RequestMethod.GET)
 //    @ResponseBody
 //    public Page<Message> getMessage () {
 //        return new ModelMap("userUU", userService.getMessage());
 //    }
-
+//
 //    @RequestMapping(value = "/getUnreadMessageNum", method = RequestMethod.GET)
 //    @ResponseBody
 //    public ModelMap getUnreadMessageNum () {

+ 11 - 0
donate-service/src/main/java/com/uas/service/donate/controller/WxpayController.java

@@ -14,6 +14,7 @@ import com.uas.platform.core.util.HttpUtil;
 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.model.Project;
 import com.uas.service.donate.model.ProjectRecode;
 import com.uas.service.donate.model.User;
@@ -68,6 +69,9 @@ public class WxpayController {
     @Autowired
     private UserService userService;
 
+    @Autowired
+    private UserDao userDao;
+
     private Logger logger = LoggerFactory.getLogger(WxpayController.class);
     private static String redirectUrl = "http://lj.ubtob.com/wxpay/redirectUrl";
     //private String orderNumber = NumberGenerator.generateId();
@@ -384,6 +388,13 @@ public class WxpayController {
                                     projectService.save(project);
                                     logger.info("更新项目,更新了项目id为" + project.getId() + ",项目名称为"
                                             + project.getName()+ "的参数人数和金额" + ",当前参与人数为" + project.getJoinAmount() + ",当前已筹集的金额" + project.getTotalAmount());
+                                    // 捐款完成之后,把捐款信息统计到用户信息中
+                                    if (SystemSession.getUser() != null) {
+                                        User user = userDao.findOne(SystemSession.getUser().getUserUU());
+                                        user.setTimes((user.getTimes() != null ? user.getTimes() : 0) + 1);
+                                        user.setDonation((user.getDonation() != null ? user.getDonation() : 0) + projectRecode.getAmount());
+                                        userDao.save(user);
+                                    }
                                 }
                                 projectRecode.setStatus(projectRecodePayStatus);
                                 logger.info("异步通知支付成功处理结束:商户订单状态:" + projectRecode.getStatus());

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

@@ -57,6 +57,12 @@ public class ActivityRecode {
     @Column(name="ar_receive_time")
     private Date receiveTime;
 
+    /**
+     * 参加活动时间
+     */
+    @Column(name="ar_joined_time")
+    private Date joinedTime;
+
     /**
      * 活动参与记录关联参与的活动
      */
@@ -220,4 +226,12 @@ public class ActivityRecode {
     public void setTel(String tel) {
         this.tel = tel;
     }
+
+    public Date getJoinedTime() {
+        return joinedTime;
+    }
+
+    public void setJoinedTime(Date joinedTime) {
+        this.joinedTime = joinedTime;
+    }
 }

+ 44 - 0
donate-service/src/main/java/com/uas/service/donate/model/User.java

@@ -47,6 +47,9 @@ public class User implements Serializable{
     @OrderBy("id")
     private Org org;
 
+    /**
+     * imId
+     */
     @Column(name = "user_imid")
     private Long userIMId;
 
@@ -56,6 +59,24 @@ public class User implements Serializable{
     @Column(name = "user_type")
     private String type;
 
+    /**
+     * 参加项目次数
+     */
+    @Column(name = "user_times")
+    private Integer times;
+
+    /**
+     * 总捐款额
+     */
+    @Column(name = "user_donation")
+    private Double donation;
+
+    /**
+     * 参加活动个数
+     */
+    @Column(name = "user_act_times")
+    private Integer actTimes;
+
     public User() {
 
     }
@@ -138,4 +159,27 @@ public class User implements Serializable{
         this.type = type;
     }
 
+    public Integer getTimes() {
+        return times;
+    }
+
+    public void setTimes(Integer times) {
+        this.times = times;
+    }
+
+    public Double getDonation() {
+        return donation;
+    }
+
+    public void setDonation(Double donation) {
+        this.donation = donation;
+    }
+
+    public Integer getActTimes() {
+        return actTimes;
+    }
+
+    public void setActTimes(Integer actTimes) {
+        this.actTimes = actTimes;
+    }
 }

+ 21 - 0
donate-service/src/main/java/com/uas/service/donate/service/UserService.java

@@ -1,7 +1,12 @@
 package com.uas.service.donate.service;
 
 
+import com.uas.platform.core.model.PageInfo;
+import com.uas.service.donate.model.ActivityRecode;
+import com.uas.service.donate.model.ProjectRecode;
+import com.uas.service.donate.model.SearchFilter;
 import com.uas.service.donate.model.User;
+import org.springframework.data.domain.Page;
 
 public interface UserService {
     //返回某人个人信息
@@ -19,4 +24,20 @@ public interface UserService {
     Integer getJoinedActivityNum();
 
     Double getSumDonation();
+
+    /**
+     * 获取已参与项目
+     * @param pageInfo 分页参数
+     * @param filter 查找filter
+     * @return 用户分页
+     */
+    Page<ProjectRecode> getJoinedProjectRecords(PageInfo pageInfo, SearchFilter filter);
+
+    /**
+     * 获取已参与活动
+     * @param pageInfo 分页参数
+     * @param filter 查找filter
+     * @return 用户分页
+     */
+    Page<ActivityRecode> getJoinedActivityRecords(PageInfo pageInfo, SearchFilter filter);
 }

+ 22 - 4
donate-service/src/main/java/com/uas/service/donate/service/impl/ActivityRecodeServiceImpl.java

@@ -2,14 +2,17 @@ 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.model.Activity;
 import com.uas.service.donate.model.ActivityRecode;
 import com.uas.service.donate.model.ProjectRecode;
+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 org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Date;
 import java.util.List;
@@ -29,23 +32,36 @@ public class ActivityRecodeServiceImpl implements ActivityRecodeService {
     @Autowired
     private ProjectService projectService;
 
+    @Autowired
+    private UserDao userDao;
+
     public ActivityRecode save(ActivityRecode joinActivity) {
 
 
         return activityRecodeDao.save(joinActivity);
     }
 
-    //参与活动
+    /**
+     * 参加活动
+     * @param activityId 活动Id
+     * @param uuid 用户UU
+     * @return 参与活动记录
+     */
+    @Transactional
     public ActivityRecode join(Long activityId, Long uuid) {
         ActivityRecode oldRecode = activityRecodeDao.findByActivityIdAndUuid(activityId, uuid);
         if (null != oldRecode) {
             return null;
         }
+        User user = userDao.findOne(uuid);
+        if (null == user) {
+            throw new IllegalArgumentException("根据UU号未找到对应用户!");
+        }
         ActivityRecode activityRecode = new ActivityRecode();
+        activityRecode.setJoinedTime(new Date());
         activityRecode.setActivityId(activityId);
         activityRecode.setUuid(uuid);
         activityRecode.setStatus(0);
-
         Activity activity = activityService.fingById(activityId);
         //更新活动参与人数
         Long joinAmount = activity.getJoinAmount();
@@ -56,6 +72,8 @@ public class ActivityRecodeServiceImpl implements ActivityRecodeService {
         activity.setJoinAmount(joinAmount);
         activityService.save(activity);
         activityRecodeDao.save(activityRecode);
+        user.setActTimes((user.getActTimes() != null ? user.getActTimes() : 0) + 1);
+        userDao.save(user);
         return activityRecode;
     }
 
@@ -85,7 +103,7 @@ public class ActivityRecodeServiceImpl implements ActivityRecodeService {
         //设置领取时间
         activityRecode.setReceiveTime(new Date());
         //找到领奖的活动
-        Activity activity=activityService.fingById(activityId);
+        Activity activity= activityService .fingById(activityId);
         //重新设置当前活动领奖总人数
         Integer receivePerson=activity.getReceivePerson();
         if(receivePerson==null){
@@ -101,7 +119,7 @@ public class ActivityRecodeServiceImpl implements ActivityRecodeService {
     @Override
     public void joinAfterDonate(Long projectRecordId, Long userUU) {
         ProjectRecode projectRecode = projectRecodeDao.findOne(projectRecordId);
-        if (null != projectRecode && null != projectRecode.getUuid()) {
+        if (null != projectRecode && null != projectRecode.getUuid() && projectRecode.getAmount() >= 1) {
             Activity activity = projectService.getJoinedActivity(projectRecode.getProId());
             join(activity.getId(), userUU);
         }

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

@@ -13,6 +13,7 @@ import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 import org.springframework.ui.ModelMap;
 
+import java.util.Date;
 import java.util.List;
 
 @Service
@@ -107,6 +108,7 @@ public class ActivityServiceImpl implements ActivityService {
         }
         //TODO 领奖功能
         record.setStatus(2);
+        record.setReceiveTime(new Date());
         activityRecodeDao.save(record);
         map.put("success", "领奖成功!");
         return map;

+ 6 - 1
donate-service/src/main/java/com/uas/service/donate/service/impl/ProjectServiceImpl.java

@@ -6,6 +6,7 @@ import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.service.donate.dao.ActivityDao;
 import com.uas.service.donate.dao.ProjectDao;
 import com.uas.service.donate.dao.ProjectRecodeDao;
+import com.uas.service.donate.dao.UserDao;
 import com.uas.service.donate.model.Activity;
 import com.uas.service.donate.model.Project;
 import com.uas.service.donate.model.ProjectRecode;
@@ -213,7 +214,11 @@ public class ProjectServiceImpl implements ProjectService {
         ProjectRecode projectRecode = projectRecodeDao.findOne(projectRecodeId);
         if (null != projectRecode) {
             if (null != projectRecode.getUuid()) {
-                map.put("success", "记录中已包含userUU!");
+                map.put("error", "记录中已包含userUU!");
+                return map;
+            }
+            if (projectRecode.getAmount() < 1) {
+                map.put("error", "捐款不足一元,不满足参加条件!");
             } else {
                 projectRecode.setUuid(userUU);
                 projectRecodeDao.save(projectRecode);

+ 56 - 0
donate-service/src/main/java/com/uas/service/donate/service/impl/UserServiceImpl.java

@@ -1,15 +1,27 @@
 package com.uas.service.donate.service.impl;
 
 import com.uas.account.util.AccountUtils;
+import com.uas.platform.core.model.PageInfo;
 import com.uas.service.donate.core.support.SystemSession;
 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.model.ActivityRecode;
+import com.uas.service.donate.model.ProjectRecode;
+import com.uas.service.donate.model.SearchFilter;
 import com.uas.service.donate.model.User;
 import com.uas.service.donate.service.UserService;
+import jdk.internal.cmm.SystemResourcePressureImpl;
 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 javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
 @Service
 public class UserServiceImpl implements UserService {
 
@@ -75,4 +87,48 @@ public class UserServiceImpl implements UserService {
         }
         return null;
     }
+
+    /**
+     * 获取已参与项目
+     *
+     * @param pageInfo 分页参数
+     * @param filter   查找filter
+     * @return 用户分页
+     */
+    @Override
+    public Page<ProjectRecode> getJoinedProjectRecords(final PageInfo pageInfo, final SearchFilter filter) {
+        if (null != SystemSession.getUser().getUserUU()) {
+            final Long userUU = SystemSession.getUser().getUserUU();
+            return projectRecodeDao.findAll(new Specification<ProjectRecode>() {
+                @Override
+                public Predicate toPredicate(Root<ProjectRecode> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+                    query.where(cb.equal(root.get("uuid"), userUU));
+                    return null;
+                }
+            }, pageInfo);
+        }
+        return null;
+    }
+
+    /**
+     * 获取已参与活动
+     *
+     * @param pageInfo 分页参数
+     * @param filter   查找filter
+     * @return 用户分页
+     */
+    @Override
+    public Page<ActivityRecode> getJoinedActivityRecords(PageInfo pageInfo, SearchFilter filter) {
+        if (null != SystemSession.getUser()) {
+            final Long userUU = SystemSession.getUser().getUserUU();
+            return activityRecodeDao.findAll(new Specification<ActivityRecode>() {
+                @Override
+                public Predicate toPredicate(Root<ActivityRecode> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
+                    query.where(cb.equal(root.get("uuid"), userUU));
+                    return null;
+                }
+            }, pageInfo);
+        }
+        return null;
+    }
 }

+ 88 - 6
donate-service/src/main/resources/templates/activeCenter.ftl

@@ -79,6 +79,15 @@
         #nav .fr a:last-child {
             margin-right: 0;
         }
+        #logout{
+            display: none;
+        }
+        #uuName{
+            display: none;
+        }
+        #icon{
+            margin-left: 10px;
+        }
         .main{
             width: 100%;
             margin: 24px 0 150px 0;
@@ -168,7 +177,7 @@
         }
         .personal-center .top .top-item{
             position: relative;
-            width: 33.3333%;
+            width: 50%;
             float: left;
         }
         .personal-center .top .top-item a{
@@ -420,10 +429,12 @@
 <div ng-include src="'static/view/common/nav.html'"></div>
 <div id="nav">
     <div class="container clearfix">
-        <div class="fl"><a href=""><img src="static/images/uas.png" href="http://www.ubtob.com/index"/></a><span style="font-size: 18px;font-weight: bold;">一元捐</span></div>
+        <div class="fl"><a  href="http://www.ubtob.com"><img src="static/images/uas.png"/></a><span style="font-size: 18px;font-weight: bold;"><a href="" style="color: #fff;">一元捐</a></span></div>
         <div class="fr">
-            <a href="https://account.ubtob.com/sso/login">登录</a>
-            <a href="javascript:void(0)">注册</a>
+            <a href="javascript:void(0);" id="login">登录</a>
+            <a href="javascript:void(0);" id="uuName"><i class="fa fa-user fa-lg" id="icon"></i></a>
+            <a href="javascript:void(0)" id="register">注册</a>
+            <a href="javascript:void(0)" id="logout">退出</a>
             <a href="http://www.ubtob.com/" target="_blank">进入优软云</a>
         </div>
     </div>
@@ -454,13 +465,13 @@
             <div class="personal-center">
                 <div class="top">
                     <div class="top-item">
-                        <a href="/userCenter">
+                        <a href="/userCenter#/project">
                             <img src="static/images/index/icon_1.png" alt=""/>
                             <p>个人中心</p>
                         </a>
                     </div>
                     <div class="top-item">
-                        <a href="/userCenter">
+                        <a href="/userCenter#/message">
                             <img src="static/images/index/icon_2.png" alt=""/>
                             <p>消息中心</p>
                             <em class="red"></em>
@@ -559,6 +570,77 @@
 <script type="text/javascript" src="static/js/bootstrap.min.js"></script>
 
 <script>
+
+    var returnUrl=window.location.href;
+    $.ajax({
+        url:"http://lj.ubtob.com/sso/account",
+        type:"GET",
+        success:function(data){
+            console.log(data);
+            if(data.content!=null){
+                $("#uuName").css("display","inline-block");
+                $("#icon").before(data.content.name);
+                $("#logout").css("display","inline-block");
+                $("#login").css("display","none");
+                $("#register").css("display","none");
+            }
+        },
+        error:function(){
+            console.log('error');
+        }
+    })
+    //登录
+    $("#login").click(function(){
+        $.ajax({
+            url:"http://lj.ubtob.com/sso/login",
+            data:{returnUrl:returnUrl},
+            type:"GET",
+            success:function(data){
+                window.location.href=data.content;
+                $("#uuName").css("display","inline-block");
+                $("#icon").before(data.content.name);
+                $("#login").css("display","none");
+                $("#register").css("display","none");
+                $("#logout").css("display","inline-block");
+                $("#uuName").css("display","inline-block");
+            },
+            error:function(data){
+                alert('登录失败');
+            }
+        })
+    })
+    //注册按钮点击
+    $("#register").click(function(){
+        $.ajax({
+            url:"http://lj.ubtob.com/sso/register",
+            type:"GET",
+            data:{returnUrl:returnUrl},
+            success:function(data){
+                window.location.href=data.content;
+            },
+            error:function(data){
+                alert('登录失败');
+            }
+        })
+    })
+    //退出
+    $("#logout").click(function(){
+        $.ajax({
+            url:"http://lj.ubtob.com/sso/logout",
+            type:"GET",
+            data:{returnUrl:returnUrl},
+            success:function(data){
+                window.location.href=data.content;
+                $("#login").css("display","inline-block");
+                $("#register").css("display","inline-block");
+                $("#logout").css("display","none");
+                $("#uuName").css("display","none");
+            },
+            error:function(){
+                alert('退出失败');
+            }
+        })
+    })
     //    banner
     $(document).ready(function () {
         var mySwiper = new Swiper ('.swiper-container', {

+ 7 - 7
donate-service/src/main/resources/templates/index.ftl

@@ -83,8 +83,8 @@
             margin-right: 0;
         }
         #logout{
-             display: none;
-         }
+            display: none;
+        }
         #uuName{
             display: none;
         }
@@ -180,7 +180,7 @@
         }
         .personal-center .top .top-item{
             position: relative;
-            width: 33.3333%;
+            width: 50%;
             float: left;
         }
         .personal-center .top .top-item a{
@@ -707,7 +707,7 @@
 <body ng-app="index">
 <div id="nav">
     <div class="container clearfix">
-        <div class="fl"><a href=""><img src="static/images/uas.png" href="http://www.ubtob.com/index"/></a><span style="font-size: 18px;font-weight: bold;">一元捐</span></div>
+        <div class="fl"><a href="http://www.ubtob.com" target="_blank"><img src="static/images/uas.png"/></a><span style="font-size: 18px;font-weight: bold;"><a href="" style="color: #fff;">一元捐</a></span></div>
         <div class="fr">
             <a href="javascript:void(0);" id="login">登录</a>
             <a href="javascript:void(0);" id="uuName"><i class="fa fa-user fa-lg" id="icon"></i></a>
@@ -742,13 +742,13 @@
             <div class="personal-center">
                 <div class="top">
                     <div class="top-item">
-                        <a href="/userCenter">
+                        <a href="/userCenter#/project">
                             <img src="static/images/index/icon_1.png" alt=""/>
                             <p>个人中心</p>
                         </a>
                     </div>
                     <div class="top-item">
-                        <a href="/userCenter">
+                        <a href="/userCenter#/message">
                             <img src="static/images/index/icon_2.png" alt=""/>
                             <p>消息中心</p>
                             <em class="red"></em>
@@ -916,7 +916,7 @@
             }
         },
         error:function(){
-            alert('error');
+            console.log('error');
         }
     })
     //登录

+ 3 - 4
donate-service/src/main/webapp/resources/js/common/query/User.js

@@ -3,13 +3,12 @@ define ([ 'ngResource' ], function() {
         return $resource ('user', {}, {
             // 获取参加项目记录
             getProjectRecord: {
-                url: 'projectrecode/joins',
-                method: 'GET',
-                isArray: true
+                url: 'user/getJoinedProjectRecords',
+                method: 'GET'
             },
             // 获取参加活动记录
             getActivityRecord: {
-                url: 'activityRecode/queryOne',
+                url: 'user/getJoinedActivityRecords',
                 method: 'GET'
             },
             // 获取消息

+ 1 - 1
donate-service/src/main/webapp/resources/js/user/app.js

@@ -27,7 +27,7 @@ define([ 'angularAMD', 'ngRoute', 'ui.router', 'ui-bootstrap', 'ngLocal', 'ngTab
 	app.config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider) {
 		$urlRouterProvider.otherwise("/");
 		$stateProvider.state("user", angularAMD.route({
-			url : '/',
+			url : '/:param',
 			title : '个人中心',
 			templateUrl : 'static/view/user/user_center.html',
 			controller : 'UserCtrl',

+ 17 - 2
donate-service/src/main/webapp/resources/js/user/controllers/UserCtrl.js

@@ -20,9 +20,24 @@ define([ 'app/app' ], function(app) {
         return fn;
     };
 
-    app.register.controller('UserCtrl', ['$scope', 'toaster', 'User', 'ngTableParams', 'BaseService', 'AuthenticationService',
-        function ($scope, toaster, User, ngTableParams, BaseService, AuthenticationService) {
+    app.register.controller('UserCtrl', ['$scope', 'toaster', 'User', 'ngTableParams', 'BaseService', 'AuthenticationService', '$stateParams',
+        function ($scope, toaster, User, ngTableParams, BaseService, AuthenticationService, $stateParams) {
         BaseService.scrollBackToTop();
+        if (angular.isUndefined($scope.active)) {
+            $scope.active = $stateParams.param;
+        }
+
+        $scope.setActive = function(value) {
+            if ($scope.active != value) {
+                $scope.active = value;
+                if ($scope.tableParams.page != 1) {
+                    $scope.tableParams.page(1);
+                } else {
+                    $scope.tableParams.reload();
+                }
+            }
+        };
+
         // 根据标签获取不同数据
         $scope.tableParams = new ngTableParams({
             page: 1,

+ 10 - 35
donate-service/src/main/webapp/resources/view/user/user_center.html

@@ -813,12 +813,12 @@
                 </div>
                 <div class="project-management fl">
                     <div class="active-toggle">
-                        <span class="active">已参与项目</span>
-                        <span>已参与活动</span>
-                        <span>消息提醒<em ng-class="{'red':unreadMessage > 0}"></em></span>
+                        <span ng-class="{'active': active == 'project'}" ng-click="setActive('project')">已参与项目</span>
+                        <span ng-class="{'active': active == 'activity'}" ng-click="setActive('activity')">已参与活动</span>
+                        <span ng-class="{'active': active == 'message'}" ng-click="setActive('message')">消息提醒<em ng-class="{'red':unreadMessage > 0}"></em></span>
                     </div>
                     <!--已参与项目-->
-                    <div class="active-detail show">
+                    <div class="active-detail" ng-class="{'show': active == 'project'}" ng-if="active == 'project'">
                         <table class="table" ng-table="tableParams">
                             <thead>
                             <tr>
@@ -866,25 +866,12 @@
                                     <!--</div>-->
                                 <!--</td>-->
                             <!--</tr>-->
-                            <tr>
-                                <td>6</td>
-                                <td>
-                                    <div class="project-title">
-                                        <h3><a href="projectDetailsAndProgress">静态数据</a></h3>
-                                        <div class="time">
-                                            <span>捐款时间:</span><span>2017-08-20 14:38:11</span>
-                                        </div>
-                                    </div>
-                                </td>
-                                <td>1200元</td>
-                                <td class="end">已结束</td>
-                            </tr>
                             </tbody>
                         </table>
                     </div>
                     <!--已参与活动-->
-                    <div class="active-detail active-detail1">
-                        <table class="table" ng-table="tableParams">
+                    <div class="active-detail active-detail1" ng-class="{'show': active == 'activity'}" ng-if="active == 'activity'">
+                        <table ng-table="tableParams" class="table">
                             <thead>
                             <tr>
                                 <td width="80">序号</td>
@@ -913,33 +900,21 @@
                                 <td><a href="/activity#/detail/{{activityRecord.activityId}}">{{activityRecord.activity.name}}</a></td>
                                 <td>{{activityRecord.activity.luckyTime | date:'yyyy-MM-dd'}}</td>
                                 <td>
-                                    <span ng-if="activityRecord.activity.stage == 0">
-                                        进行中
-                                    </span>
-                                    <span ng-if="activityRecord.activity.stage == 1">
-                                        待开奖
+                                    <span ng-if="activityRecord.activity.stage != '兑奖中'">
+                                        {{activityRecord.activity.stage}}
                                     </span>
-                                    <span ng-if="activityRecord.activity.stage == 2">
+                                    <span ng-if="activityRecord.activity.stage == '兑奖中'">
                                         <!-- 兑奖截止日期 -->
                                         <span>兑奖截止日期</span><br>
                                         <span>{{activityRecord.activity.receiveEndTime | date:'yyyy-MM-dd'}}</span>
                                     </span>
-                                    <span ng-if="activityRecord.activity.stage == 3">
-                                        已结束
-                                    </span>
                                 </td>
                             </tr>
-                            <tr class="rewarded">
-                                <td>4</td>
-                                <td><a href="activeCenter">优软一元捐特别活动一</a></td>
-                                <td>2017-08-20</td>
-                                <td>已开奖</td>
-                            </tr>
                             </tbody>
                         </table>
                     </div>
                     <!--消息提醒-->
-                    <div class="active-detail active-detail2">
+                    <div class="active-detail active-detail2" ng-class="{'show': active == 'message'}"  ng-if="active == 'message'">
                         <table class="table" ng-table="tableParams">
                             <thead>
                             <tr>