Kaynağa Gözat

Merge remote-tracking branch 'origin/dev' into dev

dongbw 8 yıl önce
ebeveyn
işleme
b67a46a262
21 değiştirilmiş dosya ile 598 ekleme ve 63 silme
  1. 3 0
      donate-service/src/main/java/com/uas/service/donate/controller/IndexController.java
  2. 32 10
      donate-service/src/main/java/com/uas/service/donate/controller/ProjectController.java
  3. 22 0
      donate-service/src/main/java/com/uas/service/donate/core/support/SystemSession.java
  4. 10 3
      donate-service/src/main/java/com/uas/service/donate/dao/ProjectDao.java
  5. 1 1
      donate-service/src/main/java/com/uas/service/donate/model/Activity.java
  6. 11 0
      donate-service/src/main/java/com/uas/service/donate/profile/Dev.java
  7. 7 0
      donate-service/src/main/java/com/uas/service/donate/profile/Prod.java
  8. 7 0
      donate-service/src/main/java/com/uas/service/donate/profile/Test.java
  9. 7 0
      donate-service/src/main/java/com/uas/service/donate/service/ProjectService.java
  10. 10 1
      donate-service/src/main/java/com/uas/service/donate/service/impl/ProjectServiceImpl.java
  11. 78 0
      donate-service/src/main/java/com/uas/service/donate/web/CommonController.java
  12. 92 0
      donate-service/src/main/java/com/uas/service/donate/web/filter/AbstractSSOInterceptor.java
  13. 55 0
      donate-service/src/main/java/com/uas/service/donate/web/filter/SSOInterceptor.java
  14. 24 0
      donate-service/src/main/resources/dev/account.properties
  15. 24 0
      donate-service/src/main/resources/prod/account.properties
  16. 49 19
      donate-service/src/main/resources/templates/activeCenter.ftl
  17. 60 26
      donate-service/src/main/resources/templates/index.ftl
  18. 24 0
      donate-service/src/main/resources/test/account.properties
  19. 45 0
      donate-service/src/main/webapp/WEB-INF/views/proxyLogin.html
  20. 33 0
      donate-service/src/main/webapp/WEB-INF/views/proxyLogout.html
  21. 4 3
      donate-service/src/main/webapp/resources/lib/kkpager/kkpager.js

+ 3 - 0
donate-service/src/main/java/com/uas/service/donate/controller/IndexController.java

@@ -49,6 +49,8 @@ public class IndexController {
         Double totality = projectRecodeService.totality();
         //得到轮播图
         List<JSONObject> carouselList=carouselService.getCarousels(useFor);
+        //动态获取所有领域分类
+        List<String> areaList=projectService.allArea();
 
         //展示不同的状态列表
         if (!"全部".equals(status) &&  "全部".equals(area)) {
@@ -81,6 +83,7 @@ public class IndexController {
             model.addAttribute("page",projects);
         }
 
+        model.addAttribute("areaList",areaList);
         model.addAttribute("historyPerson", historyPerson);
         model.addAttribute("totality", totality);
         model.addAttribute("carouselList",carouselList);

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

@@ -5,6 +5,8 @@ import com.alibaba.fastjson.JSONObject;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
 import com.uas.platform.core.web.bind.RequestState;
+import com.uas.service.donate.dao.ProjectDao;
+import com.uas.service.donate.model.Activity;
 import com.uas.service.donate.model.Project;
 import com.uas.service.donate.model.SearchFilter;
 import com.uas.service.donate.service.ProjectService;
@@ -286,14 +288,34 @@ public class ProjectController {
         return projectService.getThisDonation(id);
     }
 
-//    /**
-//     * 查询项目参与的活动
-//     * @param id
-//     * @return
-//     */
-//    @RequestMapping(value = "/joinedActivity/{id}", method = RequestMethod.GET)
-//    @ResponseBody
-//    public Activity getJoinedActivity (@PathVariable("id") Long id) {
-//        return projectService.getJoinedActivity(id);
-//    }
+    /**
+     * 查询项目关联的活动
+     * @param id
+     * @return
+     */
+    @RequestMapping(value = "/findByProId/{id}", method = RequestMethod.GET)
+    @ResponseBody
+    public Activity findByProId (@PathVariable("id") Long id) {
+        return projectService.findByProId(id);
+    }
+
+
+    /**
+     *找到某项目的相关项目
+     */
+    @RequestMapping(value = "/findSimilar/{id}",method = RequestMethod.GET)
+    @ResponseBody
+    public List<Project> findSimilar(@PathVariable("id") Long id){
+        return projectService.findSimilar(id);
+    }
+
+    /**
+     * 返回项目所有领域分类
+     */
+    @RequestMapping(value = "/allArea",method = RequestMethod.GET)
+    @ResponseBody
+    public List<String> findAllArea(){
+        return projectService.allArea();
+    }
+
 }

+ 22 - 0
donate-service/src/main/java/com/uas/service/donate/core/support/SystemSession.java

@@ -0,0 +1,22 @@
+package com.uas.service.donate.core.support;
+
+import com.uas.account.entity.UserView;
+
+/**
+ * created by shicr on 2017/11/23
+ **/
+public class SystemSession {
+    private static ThreadLocal<UserView> local = new ThreadLocal<UserView>();
+
+    public static void setUser(UserView session) {
+        local.set(session);
+    }
+
+    public static UserView getUser() {
+        return local.get();
+    }
+
+    public static void clear() {
+        local.set(null);
+    }
+}

+ 10 - 3
donate-service/src/main/java/com/uas/service/donate/dao/ProjectDao.java

@@ -1,6 +1,7 @@
 package com.uas.service.donate.dao;
 
 
+import com.uas.service.donate.model.Activity;
 import com.uas.service.donate.model.Project;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -87,8 +88,14 @@ public interface ProjectDao extends JpaRepository<Project,Long>,JpaSpecification
     List<Project> findProjectsByOrg(@Param("orgId") Long orgId);
 
     /**
-     * 获取某项目的两个相关项目
+     * 获取某项目的相关项目
      */
- /*   @Query("from Project p where p.type")
-    List<Project> findSimilar(@Param("id")Long id)*/
+    @Query("from Project p where p.area=(select p.area from Project p where p.id=:id) order by p.startTime desc ")
+    List<Project> findSimilar(@Param("id")Long id);
+
+    /**
+     * 查询某项目关联的活动
+     */
+    @Query("from Activity a where a.id=(select pq.activityId from ProjectQualification pq where pq.proId=:proId) ")
+    Activity findByProId(@Param("proId")Long proId);
 }

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

@@ -13,7 +13,7 @@ import java.util.List;
 public class Activity implements Serializable{
 
     private static final long serialVersionUID = 1L;
-    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm");
+    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 
 
     @Id

+ 11 - 0
donate-service/src/main/java/com/uas/service/donate/profile/Dev.java

@@ -0,0 +1,11 @@
+package com.uas.service.donate.profile;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+/**
+ * created by shicr on 2017/11/23
+ **/
+@Target({ElementType.TYPE,ElementType.METHOD})
+public @interface Dev {
+}

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

@@ -0,0 +1,7 @@
+package com.uas.service.donate.profile;
+
+/**
+ * created by shicr on 2017/11/23
+ **/
+public @interface Prod {
+}

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

@@ -0,0 +1,7 @@
+package com.uas.service.donate.profile;
+
+/**
+ * created by shicr on 2017/11/23
+ **/
+public @interface Test {
+}

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

@@ -2,6 +2,7 @@ package com.uas.service.donate.service;
 
 
 import com.uas.platform.core.model.PageInfo;
+import com.uas.service.donate.model.Activity;
 import com.uas.service.donate.model.Project;
 import com.uas.service.donate.model.SearchFilter;
 import org.springframework.data.domain.Page;
@@ -64,6 +65,12 @@ public interface ProjectService {
     //找出某机构下面的所有项目
     List<Project> findProjectsByOrg(Long orgId);
 
+    //查询某项目关联的活动
+    Activity findByProId(Long proId);
+
+    //找到某项目的相关项目
+    List<Project> findSimilar(Long id);
+
     /**
      * 机构项目分页
      * @param pageInfo

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

@@ -5,6 +5,7 @@ import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.service.donate.dao.ProjectDao;
 import com.uas.service.donate.dao.ProjectRecodeDao;
+import com.uas.service.donate.model.Activity;
 import com.uas.service.donate.model.Project;
 import com.uas.service.donate.model.ProjectRecode;
 import com.uas.service.donate.model.SearchFilter;
@@ -170,7 +171,6 @@ public class ProjectServiceImpl implements ProjectService {
         return projectDao.allArea();
     }
 
-
     //找出某机构下面的所有项目
     public List<Project> findProjectsByOrg(Long orgId){
         return projectDao.findProjectsByOrg(orgId);
@@ -194,5 +194,14 @@ public class ProjectServiceImpl implements ProjectService {
         return null;
     }
 
+    //查询某项目关联的活动
+    public Activity findByProId(Long proId){
+        return projectDao.findByProId(proId);
+    }
+
+    //找到某项目的相关项目
+    public List<Project> findSimilar(Long id){
+        return projectDao.findSimilar(id);
+    }
 
 }

+ 78 - 0
donate-service/src/main/java/com/uas/service/donate/web/CommonController.java

@@ -0,0 +1,78 @@
+package com.uas.service.donate.web;
+
+import com.alibaba.fastjson.JSON;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.ui.ModelMap;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+/**
+ * controller基础类
+ * 
+ * @author yingp
+ *
+ */
+public class CommonController {
+
+	protected static final String defultCharset = "UTF-8";
+
+	@Autowired
+	protected HttpServletRequest request;
+
+	@Autowired
+	protected HttpServletResponse response;
+
+	protected static ModelMap success() {
+		return new ModelMap("success", true);
+	}
+
+	protected static ModelMap success(Object data) {
+		return new ModelMap("success", true).addAttribute("content", data);
+	}
+
+	protected static ModelMap error(String errMsg) {
+		return new ModelMap("error", true).addAttribute("errMsg", errMsg);
+	}
+
+	protected static ModelMap error(String errCode, String errMsg) {
+		return new ModelMap("error", true).addAttribute("errCode", errCode).addAttribute("errMsg", errMsg);
+	}
+
+	/**
+	 * 输出json格式
+	 * 
+	 * @param obj
+	 * @throws IOException
+	 */
+	protected void printJson(Object obj) throws IOException {
+		response.setStatus(HttpStatus.FORBIDDEN.value());
+		response.addHeader("Content-Type", "application/json; charset=" + defultCharset);
+		PrintWriter printWriter = response.getWriter();
+		printWriter.append(JSON.toJSONString(obj));
+		printWriter.flush();
+		printWriter.close();
+	}
+
+	/**
+	 * 输出流
+	 * 
+	 * @param fileName
+	 *            文件名
+	 * @param bytes
+	 * @throws IOException
+	 */
+	protected ResponseEntity<byte[]> outputStream(String fileName, byte[] bytes) {
+		HttpHeaders headers = new HttpHeaders();
+		headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
+		headers.setContentDispositionFormData("attachment", fileName);
+		return new ResponseEntity<byte[]>(bytes, headers, HttpStatus.CREATED);
+	}
+
+}

+ 92 - 0
donate-service/src/main/java/com/uas/service/donate/web/filter/AbstractSSOInterceptor.java

@@ -0,0 +1,92 @@
+package com.uas.service.donate.web.filter;
+
+import com.uas.sso.SSOConfig;
+import com.uas.sso.SSOHelper;
+import com.uas.sso.SSOToken;
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.logging.Logger;
+
+/**
+ * spring mvc 接口,SSO 过滤器验证登录状态
+ * 
+ * @author yingp
+ *
+ */
+public abstract class AbstractSSOInterceptor extends HandlerInterceptorAdapter {
+
+	private static final Logger logger = Logger.getLogger(com.uas.sso.web.spring.AbstractSSOInterceptor.class.getName());
+
+	/**
+	 * 未登录情况下的处理
+	 * 
+	 * @param request
+	 * @param response
+	 * @return true继续,false跳转登录
+	 */
+	protected abstract boolean onAuthenticateFailed(HttpServletRequest request, HttpServletResponse response);
+
+	/**
+	 * 已登录情况下的处理
+	 * 
+	 * @param request
+	 * @param response
+	 * @return
+	 */
+	protected abstract void onAuthenticateSuccess(HttpServletRequest request, HttpServletResponse response);
+
+	/**
+	 * 跳转登录
+	 * 
+	 * @param request
+	 * @param response
+	 * @throws IOException
+	 */
+	protected void sendRedirect(HttpServletRequest request, HttpServletResponse response) throws IOException {
+		boolean cross = SSOHelper.isCrossDomain(request);
+		if (cross) {
+			request.getSession().setAttribute(SSOConfig.SSOReferer, request.getRequestURL());
+			response.sendRedirect(SSOHelper.getSSOService().getConfig().getCrossProxyUri());
+		} else {
+			SSOHelper.clearRedirectLogin(request, response);
+		}
+	}
+
+	private final boolean authenticate(HttpServletRequest request, HttpServletResponse response) throws IOException {
+		SSOToken token = SSOHelper.getToken(request);
+		if (token == null) {
+			// 返回false表示需要跳转登录
+			if (!onAuthenticateFailed(request, response)) {
+				if (isRedirectAble(request)) {
+					/**
+					 * 重新登录
+					 */
+					logger.fine("logout. request url:" + request.getRequestURL());
+					sendRedirect(request, response);
+				}
+				return false;
+			} else {
+				return true;
+			}
+		}
+		request.setAttribute(SSOConfig.SSO_TOKEN_ATTR, token);
+		onAuthenticateSuccess(request, response);
+		return true;
+	}
+
+	@Override
+	public final boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+		if (super.preHandle(request, response, handler)) {
+			return authenticate(request, response);
+		}
+		return false;
+	}
+
+	protected boolean isRedirectAble(HttpServletRequest request) {
+		return null == request.getHeader("x-requested-with")
+				&& (null == request.getHeader("Accept") || !request.getHeader("Accept").contains("application/json"));
+	}
+}

+ 55 - 0
donate-service/src/main/java/com/uas/service/donate/web/filter/SSOInterceptor.java

@@ -0,0 +1,55 @@
+package com.uas.service.donate.web.filter;
+
+import com.uas.account.entity.UserView;
+import com.uas.console.donate.core.support.SystemSession;
+import com.uas.console.donate.util.FastjsonUtils;
+import com.uas.sso.SSOHelper;
+import com.uas.sso.SSOToken;
+import com.uas.sso.web.spring.AbstractSSOInterceptor;
+import org.springframework.util.StringUtils;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * 登录拦截
+ */
+public class SSOInterceptor extends AbstractSSOInterceptor {
+
+	@Override
+	protected boolean onAuthenticateFailed(HttpServletRequest request, HttpServletResponse response) {
+		return false;
+	}
+
+	@Override
+	protected void onAuthenticateSuccess(HttpServletRequest request, HttpServletResponse response) {
+		UserView user = (UserView) request.getSession().getAttribute("user");
+		if (user == null) {
+			SSOToken token = SSOHelper.attrToken(request);
+			user = getUserByToken(token);
+			if (user != null) {
+				request.getSession().setAttribute("user", user);
+                SystemSession.setUser(user);
+			}
+		}
+		if (user != null) {
+			SystemSession.setUser(user);
+		}
+	}
+
+	@Override
+	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
+			throws Exception {
+		super.afterCompletion(request, response, handler, ex);
+		SystemSession.clear();
+	}
+
+	private UserView getUserByToken(SSOToken token) {
+        UserView user = null;
+		if (token != null && !StringUtils.isEmpty(token.getData())) {
+			user = FastjsonUtils.fromJson(token.getData(), UserView.class);
+		}
+		return user;
+	}
+
+}

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

@@ -0,0 +1,24 @@
+### sso config
+sso.app=donate
+token secretkey
+sso.secretkey=0taQcW073Z7G628g5H
+sso.cookie.secure=false
+
+# dev
+sso.cookie.domain=ubtob.com
+sso.login.url=http://113.105.74.135:8001/sso/login
+
+### account center config,
+account.us.save.url=http://10.10.100.133:8080/api/userspace
+account.user.save.url=http://10.10.100.133:8080/api/user
+account.user.getPartners.url = http://10.10.100.133:8080/api/partners
+account.user.getContactPage.url=https://account.ubtob.com/business/groups
+
+#cross domain
+sso.ask.url=http://113.105.74.135:8001/sso/login/ask
+sso.askout.url=http://113.105.74.135:8001/sso/logout/ask
+sso.proxy.uri=login/proxy
+sso.authcookie.secretkey=Z318866alN6gA0piuO
+sso.client.private_key=MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAIquTH9rOygR1iyMzU1CSQDXG+lJpMQgWkRWMwO3lzS+UJ3GRq1yxxD8mPFZCuItMRxP4Mvu3nvxDvsJx8lfRXk4MGswROIBPcdBAnasphN7wS5mDvDe/VBIKv+fg4j4VEnak9VUAQhS1gDtp+ZmQpCc9/gz8vueF1ueIXspAoUhAgMBAAECgYBfMP8PY1KK0Zt6nvd5NauYqQ7elg9EFJUBXU3NGmLu8Eez1NrEygk8braoy57921lffrDmKsOKvc+zn2YEoqGzbHCOuYsTDBXFCGLkj8oPeHyrs02+XuJe9j2ejhq2N04oP/TMxerFeyWnHdRCNXECrthqhwTRmGitnj2/+FLVAQJBAM93HY/5HoFlfRv9zjFy72ft/ZC60jHERXwyumbFs8z/x8sHCY1GWfgGhm1ShE1bDWAPY3W9WCFsx6nOETsHajECQQCrH8Dl7IIIHJ5D0TDisFkePnYELxpmOGlPwPOQ7hyLAdW4aB1fVIpjsWmgGOyPvmhK+b99XeLUbwpxVU7AAB3xAkAJNxJCFd+sAbUH7EMfYSqPJDwSFKpHeZ9Yf+xVqkxtO6NFOl/LPae7Y5bO/k5QHU4/yQ8y6KEkgu9vdG7Bf3fRAkEAiDlX6vDytphpmN0PyHXQC9Z3Rm9k2ZjwpM+aVXZn/HSyeQFQ2JHJNQGHby5IK0nNZloYiSlTJ/9ZVc0uSoQNUQJBAJFix2tD7b0Zq82xpeGt81rhXsofuerq1x9WM5UyYILCKJMHZw5lt58snINVzA7JxV+l60dbIgJjmRYm0yxQIAY=
+sso.client.public_key=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCKrkx/azsoEdYsjM1NQkkA1xvpSaTEIFpEVjMDt5c0vlCdxkatcscQ/JjxWQriLTEcT+DL7t578Q77CcfJX0V5ODBrMETiAT3HQQJ2rKYTe8EuZg7w3v1QSCr/n4OI+FRJ2pPVVAEIUtYA7afmZkKQnPf4M/L7nhdbniF7KQKFIQIDAQAB
+sso.center.public_key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAL2g7CEfuPZtEDy7Iz5AL6iwbHZewWGUBYUWxKnFAwAW4lY8mMavn5Ke5mB25eKj5bvUsB48r8gWTvJNsKRGEw8CAwEAAQ==

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

@@ -0,0 +1,24 @@
+### sso config
+sso.app=donate
+token secretkey
+sso.secretkey=0taQcW073Z7G628g5H
+sso.cookie.secure=false
+
+#prod
+sso.cookie.domain=ubtob.com
+sso.login.url=https://account.ubtob.com/sso/login
+
+### account center config,
+account.us.save.url=http://10.10.100.133:8080/api/userspace
+account.user.save.url=http://10.10.100.133:8080/api/user
+account.user.getPartners.url = http://10.10.100.133:8080/api/partners
+account.user.getContactPage.url=https://account.ubtob.com/business/groups
+
+#cross domain
+sso.ask.url=https://account.ubtob.com/sso/login/ask
+sso.askout.url=https://account.ubtob.com/sso/logout/ask
+sso.proxy.uri=login/proxy
+sso.authcookie.secretkey=Z318866alN6gA0piuO
+sso.client.private_key=MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAIquTH9rOygR1iyMzU1CSQDXG+lJpMQgWkRWMwO3lzS+UJ3GRq1yxxD8mPFZCuItMRxP4Mvu3nvxDvsJx8lfRXk4MGswROIBPcdBAnasphN7wS5mDvDe/VBIKv+fg4j4VEnak9VUAQhS1gDtp+ZmQpCc9/gz8vueF1ueIXspAoUhAgMBAAECgYBfMP8PY1KK0Zt6nvd5NauYqQ7elg9EFJUBXU3NGmLu8Eez1NrEygk8braoy57921lffrDmKsOKvc+zn2YEoqGzbHCOuYsTDBXFCGLkj8oPeHyrs02+XuJe9j2ejhq2N04oP/TMxerFeyWnHdRCNXECrthqhwTRmGitnj2/+FLVAQJBAM93HY/5HoFlfRv9zjFy72ft/ZC60jHERXwyumbFs8z/x8sHCY1GWfgGhm1ShE1bDWAPY3W9WCFsx6nOETsHajECQQCrH8Dl7IIIHJ5D0TDisFkePnYELxpmOGlPwPOQ7hyLAdW4aB1fVIpjsWmgGOyPvmhK+b99XeLUbwpxVU7AAB3xAkAJNxJCFd+sAbUH7EMfYSqPJDwSFKpHeZ9Yf+xVqkxtO6NFOl/LPae7Y5bO/k5QHU4/yQ8y6KEkgu9vdG7Bf3fRAkEAiDlX6vDytphpmN0PyHXQC9Z3Rm9k2ZjwpM+aVXZn/HSyeQFQ2JHJNQGHby5IK0nNZloYiSlTJ/9ZVc0uSoQNUQJBAJFix2tD7b0Zq82xpeGt81rhXsofuerq1x9WM5UyYILCKJMHZw5lt58snINVzA7JxV+l60dbIgJjmRYm0yxQIAY=
+sso.client.public_key=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCKrkx/azsoEdYsjM1NQkkA1xvpSaTEIFpEVjMDt5c0vlCdxkatcscQ/JjxWQriLTEcT+DL7t578Q77CcfJX0V5ODBrMETiAT3HQQJ2rKYTe8EuZg7w3v1QSCr/n4OI+FRJ2pPVVAEIUtYA7afmZkKQnPf4M/L7nhdbniF7KQKFIQIDAQAB
+sso.center.public_key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAL2g7CEfuPZtEDy7Iz5AL6iwbHZewWGUBYUWxKnFAwAW4lY8mMavn5Ke5mB25eKj5bvUsB48r8gWTvJNsKRGEw8CAwEAAQ==

+ 49 - 19
donate-service/src/main/resources/templates/activeCenter.ftl

@@ -12,7 +12,7 @@
     <link href="static/images/icon/u.png" rel="icon" type="image/x-icon" />
     <link rel="stylesheet" href="static/css/bootstrap.min.css">
     <link rel="stylesheet" href="static/css/base.css">
-    <link rel="stylesheet" type="text/css" href="static/css/kkpager_blue.css" />
+    <link rel="stylesheet" type="text/css" href="static/css/kkpager_orange.css" />
     <script type="text/javascript" src="static/lib/kkpager/kkpager.js"></script>
     <style>
         body{
@@ -339,13 +339,13 @@
             font-size: 14px;
             color: #999;
         }
-        .section2 .list-item .project-detail div span:last-child{
+        .section2 .list-item .project-detail div span.partTime {
             color: #323232;
         }
         .section2 .list-item .project-detail div.clearfix div.fl{
-            width: 290px;
+            width: 190px;
         }
-        .section2 .list-item .project-detail div span.award {
+        .section2 .list-item .project-detail div span.award span{
             color: #323232;
         }
         .section2 .list-item .project-progress{
@@ -397,26 +397,39 @@
 <div class="main">
     <div class="container">
         <div class="section section1">
-            <!--banner-->
+            <!--banner&ndash;&gt;-->
             <div class="banner">
                 <div id="myCarousel" class="carousel slide">
                     <!-- 轮播(Carousel)指标 -->
                     <ol class="carousel-indicators">
-                        <li data-target="#myCarousel" data-slide-to="0" class="active"></li>
-                        <li data-target="#myCarousel" data-slide-to="1"></li>
-                        <li data-target="#myCarousel" data-slide-to="2"></li>
+                    <#if carouselList?exists>
+                        <#list carouselList as carousel>
+                            <#if carousel_index==0>
+                                <li data-target="#myCarousel" data-slide-to="${carousel_index}" class="active"></li>
+                            <#else>
+                                <li data-target="#myCarousel" data-slide-to="${carousel_index}"></li>
+                            </#if>
+                        </#list>
+                    </#if>
                     </ol>
-                    <!-- 轮播(Carousel)项目 -->
                     <div class="carousel-inner">
-                        <div class="item active"><img src="static/images/index/banner01.png"/></div>
-                        <div class="item"><img src="static/images/index/banner01.png"/></div>
-                        <div class="item"><img src="static/images/index/banner01.png"/></div>
+                    <#if carouselList?exists>
+                        <#list carouselList as carousel>
+                            <#if carousel_index==0>
+                                <div class="item active"><img src="${carousel.pictureUrl}"/></div>
+                            </#if>
+                            <#if carousel_index!=0>
+                                <div class="item"><img src="${carousel.pictureUrl}"/></div>
+                            </#if>
+                        </#list>
+                    </#if>
                     </div>
-                    <!-- 轮播(Carousel)导航 -->
+                <#--     <!-- 轮播(Carousel)导航 &ndash;&gt;-->
                     <a class="carousel-control left" href="#myCarousel"
                        data-slide="prev">&lsaquo;</a>
                     <a class="carousel-control right" href="#myCarousel"
                        data-slide="next">&rsaquo;</a>
+
                 </div>
             </div>
             <!--personal-center-->
@@ -454,7 +467,7 @@
                     </div>
                     <div class="bottom-item">
                         <div class="title"><span>历史捐款总额</span></div>
-                        <div class="count" style="margin-left: -10px;"><span class="totality">${totality!''}</span><span>元</span></div>
+                        <div class="count" style="margin-left: -10px;"><span class="totality">${totality?string(',###.00')!'0.00'}</span><span>元</span></div>
                     </div>
                 </div>
             </div>
@@ -471,7 +484,7 @@
                 </div>
                 <div class="form-group form-groups">
                     <input type="text" class="form-control" placeholder="请输入关键词" id="search"/>
-                    <img src="static/images/index/search.png" alt=""/>
+                    <img src="static/images/index/search.png" alt="" id="searchButton"/>
                 </div>
             </div>
             <#if page?exists>
@@ -485,13 +498,19 @@
                     <div class="clearfix">
                         <span class="fl">活动奖品:</span>
                         <div class="fl">
-                            <span class="award"><#list activity.awards as award><span>${award.awardName!''}</span></#list></span>
+                            <span class="award">
+                                <#list activity.awards as award>
+                                    <span>${award.awardLevel!''}:</span>
+                                    <span>${award.awardName!''}</span>
+                                    <span><#if award.amount?exists>&nbsp;(${award.amount}份)</#if></span>
+                                </#list>
+                            </span>
                         </div>
                     </div>
-                    <div><span>参与时间:</span><span>${activity.startTime}至${activity.endTime}</span></div>
+                    <div><span>参与时间:</span><span class="partTime">${activity.startTime}至${activity.endTime}</span></div>
                 </div>
                 <div class="project-progress fr">
-                    <span>${activity.stage}</span>
+                    <span><#if activity.stage=='兑奖中'><span>兑奖截止日期</span><p>${activity.receiveEndTime}</p><#elseif activity.stage=='待开奖'><span class=".await">${activity.stage}</span><#else>${activity.stage}</#if></span>
                 </div>
             </div>
             </#list>
@@ -554,14 +573,25 @@
         }
    })
 
+    //搜索框按钮点击查询项目
+    $("#searchButton").click(function(){
+        var search=$("#search").val();
+        window.location.href="http://lj.ubtob.com/activeCenter?search="+search;
+    })
+
     //生成分页代码
     kkpager.generPageHtml({
-        pno : pno+1,//当前页,pno是0开始,而分页页码是1开始
+        pno : parseInt(pno)+1,//当前页,pno是0开始,而分页页码是1开始
         mode : 'click', //设置为click模式
         //总页码
         total : '${page.totalPages!''}',
         //总数据条数
         totalRecords : '${page.totalElements!''}',
+        isShowFirstPageBtn:false,//不展示首页
+        isShowLastPageBtn:false,//不展示尾页
+        isShowPrePageBtn:false,//不展示上一页
+        isGoPage:false,//不展示页码跳转输入框
+        isShowTotalRecords:true,
         //点击页码、页码输入框跳转、以及首页、下一页等按钮都会调用click
         //适用于不刷新页面,比如ajax
         click : function(pno){

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

@@ -398,6 +398,7 @@
             background: #a0a0a0;
             color: #fff;
             cursor: pointer;
+            disabled:disabled;
         }
         .section2 .list-item a.donationOver:hover{
             background: #a0a0a0;
@@ -580,7 +581,7 @@
             height: 20px;
             vertical-align: middle;
         }
-        .pop .body button{
+        .pop .body .button{
             width: 200px;
             height: 40px;
             line-height: 40px;
@@ -591,9 +592,24 @@
             border: none;
             outline: none;
         }
-        .pop .body button:hover{
+        .pop .body .button:hover{
             background: #be3b1b;
         }
+        .pop .body .buttonDisabled{
+            width: 200px;
+            height: 40px;
+            line-height: 40px;
+            font-size: 18px;
+            text-align: center;
+            background: #a0a0a0;
+            color: #fff;
+            border: none;
+            outline: none;
+            disabled: disabled;
+        }
+        .pop .body .buttonDisabled:hover{
+            background: #a0a0a0;
+        }
 
         #hover-background .x-floating-wrap {
             position: fixed;
@@ -642,6 +658,9 @@
         .show{
             display: block;
         }
+        #kkpager {
+            margin-bottom: 130px!important;
+        }
         #carousel-fragment li {
             width: 12px;
             height: 12px;
@@ -679,24 +698,30 @@
             <!--banner&ndash;&gt;-->
             <div class="banner">
                 <div id="myCarousel" class="carousel slide">
-                 <#--   <!-- 轮播(Carousel)指标 &ndash;&gt;-->
-                    <#--<ol class="carousel-indicators">-->
-                        <#--<li data-target="#myCarousel" data-slide-to="0" class="active"></li>-->
-                        <#--<li data-target="#myCarousel" data-slide-to="1"></li>-->
-                        <#--<li data-target="#myCarousel" data-slide-to="2"></li>-->
-                    <#--</ol>-->
+                    <!-- 轮播(Carousel)指标 -->
+                    <ol class="carousel-indicators">
+                        <#if carouselList?exists>
+                            <#list carouselList as carousel>
+                                <#if carousel_index==0>
+                                    <li data-target="#myCarousel" data-slide-to="${carousel_index}" class="active"></li>
+                                    <#else>
+                                        <li data-target="#myCarousel" data-slide-to="${carousel_index}"></li>
+                                </#if>
+                            </#list>
+                        </#if>
+                    </ol>
+                <div class="carousel-inner">
                      <#if carouselList?exists>
                          <#list carouselList as carousel>
-                         <ol class="carousel-indicators">
-                             <li  class="active"></li>
-                         </ol>
-                             <div class="carousel-inner">
+                             <#if carousel_index==0>
                                  <div class="item active"><img src="${carousel.pictureUrl}"/></div>
+                             </#if>
+                             <#if carousel_index!=0>
                                  <div class="item"><img src="${carousel.pictureUrl}"/></div>
-                             </div>
+                             </#if>
                          </#list>
                      </#if>
-
+                </div>
                    <#--     <!-- 轮播(Carousel)导航 &ndash;&gt;-->
                         <a class="carousel-control left" href="#myCarousel"
                            data-slide="prev">&lsaquo;</a>
@@ -734,12 +759,12 @@
                 <!--切换&ndash;&gt;-->
                 <div class="buttons show">
                     <div class="bottom-item">
-                        <div class="title"><span>历史参加人</span></div>
+                        <div class="title"><span>历史参加人</span></div>
                         <div class="count"><span class="historyperson">${historyPerson!''}</span><span>人次</span></div>
                     </div>
                     <div class="bottom-item">
                         <div class="title"><span>历史捐款总额</span></div>
-                        <div class="count" style="margin-left: -14px;"><span class="totality">${totality!''}</span><span>元</span></div>
+                        <div class="count" style="margin-left: -14px;"><span class="totality">${totality?string('0.00')!'0.00'}</span><span>元</span></div>
                     </div>
                 </div>
             </div>
@@ -759,7 +784,7 @@
                     <select id="chooseArea">
                         <option>全部</option>
                         <option>环保/保护动物</option>
-                        <option>疾病助</option>
+                        <option>疾病助</option>
                         <option>扶贫/救灾</option>
                         <option>教育/助学</option>
                     </select>
@@ -787,9 +812,14 @@
                     <div><span>状态:<em>${project.overdue!''}</em></span></div>
                     <div><span>参与:<em>${project.joinAmount!'0'}</em>人</span></div>
                     <div><span>筹款:<em class="red">${project.totalAmount!'0'}</em>元</span></div>
-                    <div><span>进度:<#if project.target?exists><#if project.totalAmount?exists>(${project.totalAmount/project.target*100!''}%)</#if></#if></span></div>
+                    <div><span>进度:<#if project.target?exists><#if project.totalAmount?exists>(${(project.totalAmount/project.target*100)?string(',###.00')!''}%)</#if></#if></span></div>
                 </div>
-                    <a class="fr donation" onclick="donate(this)">我要捐款</a>
+                    <#if project.overdue=="已结束">
+                        <a class="fr donationOver">我要捐款</a>
+                    </#if>
+                    <#if project.overdue!="已结束">
+                        <a class="fr donation" onclick="donate(this)">我要捐款</a>
+                    </#if>
                 </div>
                 <!--弹出窗-->
                 <div class="pop">
@@ -815,7 +845,7 @@
                             <div class="fl pay" id="pay-way">
                                 <div class="item active"><img src="static/images/zfb.png" alt=""/>支付宝</div>
                                 <div class="item"><img src="static/images/wx.png" alt=""/>微信支付</div>
-                                <#--<div class="item"><img src="static/images/bank.png" alt=""/>网银支付</div>-->
+                               <#-- <div class="item"><img src="static/images/bank.png" alt=""/>网银支付</div>-->
                             </div>
                         </div>
                         <div class="choose clearfix">
@@ -825,7 +855,7 @@
                                 <input type="checkbox" class="fl"><span class="fl"><a href="">同意并接受《优软一元捐用户协议》</a></span>
                             </div>
                         </div>
-                        <#--<a href="donationsOver">--> <button onclick="pay(${project.id!''}, money, payWay)">确认捐款</button><#--</a>-->
+                       <button onclick="pay(${project.id!''}, money, payWay)" class="buttonDisabled">确认捐款</button><#--</a>-->
                     </div>
                 </div>
             </div>
@@ -885,12 +915,16 @@
 
     //生成分页代码
     kkpager.generPageHtml({
-        pno : pno+1,//当前页
+        pno : parseInt(pno)+1,//当前页
         mode : 'click', //设置为click模式
         //总页码
-        total : '${page.totalPages!''}',
+        total : ${page.totalPages!''},
         //总数据条数
-        totalRecords : '${page.totalElements!''}',
+        totalRecords : ${page.totalElements!''},
+        isShowFirstPageBtn:false,//不展示首页
+        isShowLastPageBtn:false,//不展示尾页
+        isShowPrePageBtn:false,//不展示上一页
+        isGoPage:false,//不展示页码跳转输入框
         //点击页码、页码输入框跳转、以及首页、下一页等按钮都会调用click
         //适用于不刷新页面,比如ajax
         click : function(pno){
@@ -911,9 +945,9 @@
             currPageBeforeText		: '当前第',
             currPageAfterText		: '页',
             totalInfoSplitStr		: '/',
-            totalRecordsBeforeText	: '共',
+            totalRecordsBeforeText	: '&nbsp;共',
             totalRecordsAfterText	: '条数据',
-            gopageBeforeText		: ' 转到',
+            gopageBeforeText		: '&nbsp;转到',
             gopageButtonOkText		: '确定',
             gopageAfterText			: '页',
             buttonTipBeforeText		: '第',

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

@@ -0,0 +1,24 @@
+### sso config
+sso.app=donate
+token secretkey
+sso.secretkey=0taQcW073Z7G628g5H
+sso.cookie.secure=false
+
+#test
+sso.cookie.domain=ubtob.com
+sso.login.url=http://113.105.74.135:8001/sso/login
+
+### account center config,
+account.us.save.url=http://10.10.100.133:8080/api/userspace
+account.user.save.url=http://10.10.100.133:8080/api/user
+account.user.getPartners.url = http://10.10.100.133:8080/api/partners
+account.user.getContactPage.url=https://account.ubtob.com/business/groups
+
+#cross domain
+sso.ask.url=http://113.105.74.135:8001/sso/login/ask
+sso.askout.url=http://113.105.74.135:8001/sso/logout/ask
+sso.proxy.uri=login/proxy
+sso.authcookie.secretkey=Z318866alN6gA0piuO
+sso.client.private_key=MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAIquTH9rOygR1iyMzU1CSQDXG+lJpMQgWkRWMwO3lzS+UJ3GRq1yxxD8mPFZCuItMRxP4Mvu3nvxDvsJx8lfRXk4MGswROIBPcdBAnasphN7wS5mDvDe/VBIKv+fg4j4VEnak9VUAQhS1gDtp+ZmQpCc9/gz8vueF1ueIXspAoUhAgMBAAECgYBfMP8PY1KK0Zt6nvd5NauYqQ7elg9EFJUBXU3NGmLu8Eez1NrEygk8braoy57921lffrDmKsOKvc+zn2YEoqGzbHCOuYsTDBXFCGLkj8oPeHyrs02+XuJe9j2ejhq2N04oP/TMxerFeyWnHdRCNXECrthqhwTRmGitnj2/+FLVAQJBAM93HY/5HoFlfRv9zjFy72ft/ZC60jHERXwyumbFs8z/x8sHCY1GWfgGhm1ShE1bDWAPY3W9WCFsx6nOETsHajECQQCrH8Dl7IIIHJ5D0TDisFkePnYELxpmOGlPwPOQ7hyLAdW4aB1fVIpjsWmgGOyPvmhK+b99XeLUbwpxVU7AAB3xAkAJNxJCFd+sAbUH7EMfYSqPJDwSFKpHeZ9Yf+xVqkxtO6NFOl/LPae7Y5bO/k5QHU4/yQ8y6KEkgu9vdG7Bf3fRAkEAiDlX6vDytphpmN0PyHXQC9Z3Rm9k2ZjwpM+aVXZn/HSyeQFQ2JHJNQGHby5IK0nNZloYiSlTJ/9ZVc0uSoQNUQJBAJFix2tD7b0Zq82xpeGt81rhXsofuerq1x9WM5UyYILCKJMHZw5lt58snINVzA7JxV+l60dbIgJjmRYm0yxQIAY=
+sso.client.public_key=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCKrkx/azsoEdYsjM1NQkkA1xvpSaTEIFpEVjMDt5c0vlCdxkatcscQ/JjxWQriLTEcT+DL7t578Q77CcfJX0V5ODBrMETiAT3HQQJ2rKYTe8EuZg7w3v1QSCr/n4OI+FRJ2pPVVAEIUtYA7afmZkKQnPf4M/L7nhdbniF7KQKFIQIDAQAB
+sso.center.public_key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAL2g7CEfuPZtEDy7Iz5AL6iwbHZewWGUBYUWxKnFAwAW4lY8mMavn5Ke5mB25eKj5bvUsB48r8gWTvJNsKRGEw8CAwEAAQ==

+ 45 - 0
donate-service/src/main/webapp/WEB-INF/views/proxyLogin.html

@@ -0,0 +1,45 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+<meta name="renderer" content="webkit">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<meta name="robots" content="none">
+<base href="../" />
+<link href="static/img/icon/u.png" rel="icon" type="image/x-icon" />
+<script type="text/javascript" src="static/lib/jquery/jquery.min.js"></script>
+</head>
+<body>
+	<script type="text/javascript">
+		function proxyLogin(askUrl, askData, loginUrl) {
+			$.getJSON(askUrl + "?callback=?", {
+				askData : askData
+			}, function(d) {
+				if (d.error) {
+					// 跳转登录页面
+					window.location.href = loginUrl;
+				} else {
+					$.post('sso/login/crossAfter', {
+						replyTxt : d.content
+					}, function(e) {
+						
+						// 已登录
+						if (e.returnUrl.indexOf('/index')) {
+							window.location.href = e.returnUrl.replace("/index", "/");
+						} else {
+							window.location.href = e.returnUrl;
+						}
+					}, "json");
+				}
+			});
+		}
+		$.getJSON('sso/login/crossBefore', function(data) {
+			proxyLogin(data.askUrl, data.askData, data.loginUrl);
+		});
+	</script>
+	<div align="center" style="margin-top: 180px;">
+		<img src="static/img/all/loading.gif">
+		<p style="color: #888">正在加载中,请稍候……</p>
+	</div>
+</body>
+</html>

+ 33 - 0
donate-service/src/main/webapp/WEB-INF/views/proxyLogout.html

@@ -0,0 +1,33 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+<meta name="renderer" content="webkit">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<meta name="robots" content="none">
+<base href="../" />
+<link href="static/img/icon/u.png" rel="icon" type="image/x-icon" />
+<script type="text/javascript" src="static/lib/jquery/jquery.min.js"></script>
+</head>
+<body>
+<script type="text/javascript">
+	function proxyLogout(askUrl, logoutUrl, retUrl) {
+	    $.getJSON(askUrl + "?callback=?", function(d){
+			if (d.error) {
+				// 跳转登出页面
+				window.location.href = logoutUrl;
+			} else {
+				window.location.href = retUrl;
+			}
+	    });
+	}
+	$.getJSON('sso/logout/crossBefore', function(data){
+		proxyLogout(data.askUrl, data.logoutUrl, data.returnUrl);
+	});
+</script>
+<div align="center" style="margin-top: 180px;">
+	<img src="static/img/all/loading.gif"> 
+	<p style="color: #888">正在加载中,请稍候……</p>
+</div>
+</body>
+</html>

+ 4 - 3
donate-service/src/main/webapp/resources/lib/kkpager/kkpager.js

@@ -7,7 +7,7 @@
 */
 var kkpager = {
 		pagerid 			: 'kkpager', //divID
-		mode				: 'link', //模式(link 或者 click)
+		mode				: 'click', //模式(link 或者 click)
 		pno					: 1, //当前页码
 		total				: 1, //总页码
 		totalRecords		: 0, //总数据条数
@@ -17,7 +17,7 @@ var kkpager = {
 		isShowNextPageBtn	: true, //是否显示下一页按钮
 		isShowTotalPage 	: true, //是否显示总页数
 		isShowCurrPage		: true,//是否显示当前页
-		isShowTotalRecords 	: false, //是否显示总记录数
+		isShowTotalRecords 	: true, //是否显示总记录数
 		isGoPage 			: true,	//是否显示页码跳转输入框
 		isWrapedPageBtns	: true,	//是否用span包裹住页码按钮
 		isWrapedInfoTextAndGoPageBtn : true, //是否用span包裹住分页信息和跳转按钮
@@ -191,7 +191,8 @@ var kkpager = {
 					total_info += total_info_splitstr;
 					total_info += this.lang.totalRecordsBeforeText + '<span class="totalRecordNum">'+this.totalRecords + '</span>' + this.lang.totalRecordsAfterText;
 				}
-			}else if(this.isShowTotalRecords){
+			}
+			if(this.isShowTotalRecords){
 				total_info += this.lang.totalRecordsBeforeText + '<span class="totalRecordNum">'+this.totalRecords + '</span>' + this.lang.totalRecordsAfterText;
 			}
 			total_info += '</span>';