Kaynağa Gözat

添加全量更新接口

wangmh 7 yıl önce
ebeveyn
işleme
4b2bca1f07

+ 54 - 0
sso-server/src/main/java/com/uas/sso/controller/RelationManagerController.java

@@ -0,0 +1,54 @@
+package com.uas.sso.controller;
+
+import com.uas.sso.service.RelationService;
+import com.uas.sso.util.encry.Md5Utils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 用户企业关系管理controller
+ *
+ * @author wangmh
+ * @date 2018/1/2
+ */
+@RestController
+@RequestMapping("/api/relation")
+public class RelationManagerController extends BaseController {
+
+    @Autowired
+    private RelationService relationService;
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(RelationManagerController.class);
+
+    /**
+     * 分页获取用户企业关系信息
+     * @param pageNumber 当前页数
+     * @param pageSize 每页大小
+     * @param timestamp 时间戳,与当前时间不能相差10分钟
+     * @param encro 签名 md5(#{pageNumber}, #{pageSize}, #{timestamp}, ssoAccountSync),
+     * @return
+     */
+    @GetMapping("/paging/info")
+    public ModelMap getRelationByUpdateTime(int pageNumber, int pageSize, long timestamp, String encro) {
+        // 验证时间
+        long current = System.currentTimeMillis();
+        if (Math.abs(current - timestamp) > 10 * 60 * 1000) {
+            LOGGER.warn("全量更新:分页获取企业信息请求过期,当前时间:{},请求时间:{}", current, timestamp);
+            return error("请求过期");
+        }
+
+        // 验证签名
+        String laws = String.format("%s, %s, %s, %s", pageNumber, pageSize, timestamp, "ssoAccountSync");
+        String str = Md5Utils.encode(laws, null);
+        if (!str.equals(encro)) {
+            LOGGER.warn("全量更新:分页获取企业信息签名错误,明文:{},签名:{}", laws, encro);
+            return error("签名错误");
+        }
+        return success(relationService.getRelationInfo(pageNumber, pageSize));
+    }
+}

+ 32 - 1
sso-server/src/main/java/com/uas/sso/controller/UserManagerController.java

@@ -3,11 +3,13 @@ package com.uas.sso.controller;
 import com.uas.account.exception.AccountException;
 import com.uas.sso.core.Const;
 import com.uas.sso.entity.*;
-import com.uas.sso.i.CountCallBack;
 import com.uas.sso.service.ApplyUserSpaceService;
 import com.uas.sso.service.UserService;
 import com.uas.sso.service.UserspaceService;
+import com.uas.sso.util.encry.Md5Utils;
 import org.apache.commons.codec.binary.Base64;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.ui.ModelMap;
 import org.springframework.util.StringUtils;
@@ -38,6 +40,8 @@ public class UserManagerController extends BaseController {
     @Autowired
     private ApplyUserSpaceService applyUserSpaceService;
 
+    private static final Logger LOGGER = LoggerFactory.getLogger(UserManagerController.class);
+
     /**
      * 用户信息新增、修改
      *
@@ -626,4 +630,31 @@ public class UserManagerController extends BaseController {
     public ModelMap getMaxUUInLastWeek() {
         return success(userService.getMaxUUInLastWeek());
     }
+
+    /**
+     * 分页获取用户信息
+     * @param pageNumber 当前页数
+     * @param pageSize 每页大小
+     * @param timestamp 时间戳,与当前时间不能相差10分钟
+     * @param encro 签名 md5(#{pageNumber}, #{pageSize}, #{timestamp}, ssoAccountSync),
+     * @return
+     */
+    @GetMapping("/paging/info")
+    public ModelMap getUserPaging(int pageNumber, int pageSize, long timestamp, String encro) {
+        // 验证时间
+        long current = System.currentTimeMillis();
+        if (Math.abs(current - timestamp) > 10 * 60 * 1000) {
+            LOGGER.warn("全量更新:分页获取用户信息请求过期,当前时间:{},请求时间:{}", current, timestamp);
+            return error("请求过期");
+        }
+
+        // 验证签名
+        String laws = String.format("%s, %s, %s, %s", pageNumber, pageSize, timestamp, "ssoAccountSync");
+        String str = Md5Utils.encode(laws, null);
+        if (!str.equals(encro)) {
+            LOGGER.warn("全量更新:分页获取用户信息签名错误,明文:{},签名:{}", laws, encro);
+            return error("签名错误");
+        }
+        return success(userService.getUserInfo(pageNumber, pageSize));
+    }
 }

+ 28 - 3
sso-server/src/main/java/com/uas/sso/controller/UserspaceManagerController.java

@@ -8,15 +8,14 @@ import com.uas.sso.dao.UserspaceDao;
 import com.uas.sso.entity.App;
 import com.uas.sso.entity.User;
 import com.uas.sso.entity.Userspace;
-import com.uas.sso.i.CountCallBack;
 import com.uas.sso.service.AppService;
 import com.uas.sso.service.ApplyUserSpaceService;
 import com.uas.sso.service.UserService;
 import com.uas.sso.service.UserspaceService;
-import com.uas.sso.util.CountUtils;
 import com.uas.sso.util.FastjsonUtils;
 import com.uas.sso.util.FileUrl;
 import com.uas.sso.util.HttpUtils;
+import com.uas.sso.util.encry.Md5Utils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -27,7 +26,6 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.*;
-import java.text.ParseException;
 import java.util.*;
 
 import static com.alibaba.fastjson.JSON.parseObject;
@@ -475,4 +473,31 @@ public class UserspaceManagerController extends BaseController {
         }
         return null;
     }
+
+    /**
+     * 分页获取企业信息
+     * @param pageNumber 当前页数
+     * @param pageSize 每页大小
+     * @param timestamp 时间戳,与当前时间不能相差10分钟
+     * @param encro 签名 md5(#{pageNumber}, #{pageSize}, #{timestamp}, ssoAccountSync),
+     * @return
+     */
+    @GetMapping("/paging/info")
+    public ModelMap getUserSpaceInfoByUpdateTime(int pageNumber, int pageSize, long timestamp, String encro) {
+        // 验证时间
+        long current = System.currentTimeMillis();
+        if (Math.abs(current - timestamp) > 10 * 60 * 1000) {
+            LOGGER.warn("全量更新:分页获取企业信息请求过期,当前时间:{},请求时间:{}", current, timestamp);
+            return error("请求过期");
+        }
+
+        // 验证签名
+        String laws = String.format("%s, %s, %s, %s", pageNumber, pageSize, timestamp, "ssoAccountSync");
+        String str = Md5Utils.encode(laws, null);
+        if (!str.equals(encro)) {
+            LOGGER.warn("全量更新:分页获取企业信息签名错误,明文:{},签名:{}", laws, encro);
+            return error("签名错误");
+        }
+        return success(userspaceService.getUserspaceInfo(pageNumber, pageSize));
+    }
 }

+ 13 - 0
sso-server/src/main/java/com/uas/sso/dao/RelationDao.java

@@ -0,0 +1,13 @@
+package com.uas.sso.dao;
+
+import com.uas.sso.entity.Relation;
+import com.uas.sso.entity.RelationId;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+/**
+ * @author wangmh
+ * @create 2018-11-07 11:24
+ **/
+public interface RelationDao extends JpaRepository<Relation, RelationId>, JpaSpecificationExecutor<Relation> {
+}

+ 64 - 0
sso-server/src/main/java/com/uas/sso/entity/Relation.java

@@ -0,0 +1,64 @@
+package com.uas.sso.entity;
+
+import com.alibaba.fastjson.annotation.JSONField;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Enumerated;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import java.io.Serializable;
+
+/**
+ * 用户企业关联关系
+ *
+ * @author wangmh
+ * @create 2018-11-06 16:09
+ **/
+@Entity
+@Table(name = "sso$user_userspace")
+public class Relation implements Serializable {
+    private static final long serialVersionUID = -16327489807404082L;
+    @Id
+    @Enumerated
+    private RelationId relationId;
+
+    @Column(name = "user_uu", updatable = false, insertable = false)
+    private Long userUU;
+
+    @Column(name = "space_uu", updatable = false, insertable = false)
+    private Long spaceUU;
+
+    public Relation() {
+    }
+
+    public Relation(Long userUU, Long spaceUU) {
+        this.userUU = userUU;
+        this.spaceUU = spaceUU;
+    }
+
+    @JSONField(serialize = false)
+    public RelationId getRelationId() {
+        return relationId;
+    }
+
+    public void setRelationId(RelationId relationId) {
+        this.relationId = relationId;
+    }
+
+    public Long getUserUU() {
+        return userUU;
+    }
+
+    public void setUserUU(Long userUU) {
+        this.userUU = userUU;
+    }
+
+    public Long getSpaceUU() {
+        return spaceUU;
+    }
+
+    public void setSpaceUU(Long spaceUU) {
+        this.spaceUU = spaceUU;
+    }
+}

+ 46 - 0
sso-server/src/main/java/com/uas/sso/entity/RelationId.java

@@ -0,0 +1,46 @@
+package com.uas.sso.entity;
+
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+import java.io.Serializable;
+
+/**
+ * 用户企业关联关系
+ *
+ * @author wangmh
+ * @create 2018-11-06 16:09
+ **/
+@Embeddable
+public class RelationId implements Serializable {
+
+    private static final long serialVersionUID = 7327498262166537088L;
+    @Column(name = "user_uu", updatable = false, insertable = false)
+    private Long userUU;
+
+    @Column(name = "space_uu", updatable = false, insertable = false)
+    private Long spaceUU;
+
+    public RelationId() {
+    }
+
+    public RelationId(Long userUU, Long spaceUU) {
+        this.userUU = userUU;
+        this.spaceUU = spaceUU;
+    }
+
+    public Long getUserUU() {
+        return userUU;
+    }
+
+    public void setUserUU(Long userUU) {
+        this.userUU = userUU;
+    }
+
+    public Long getSpaceUU() {
+        return spaceUU;
+    }
+
+    public void setSpaceUU(Long spaceUU) {
+        this.spaceUU = spaceUU;
+    }
+}

+ 21 - 0
sso-server/src/main/java/com/uas/sso/service/RelationService.java

@@ -0,0 +1,21 @@
+package com.uas.sso.service;
+
+import com.uas.sso.entity.PageInfo;
+import com.uas.sso.entity.Relation;
+
+/**
+ * 用户企业关系service
+ *
+ * @author wangmh
+ * @create 2018-11-07 11:49
+ **/
+public interface RelationService {
+
+    /**
+     * 分页获取用户企业关系信息
+     * @param pageNumber 当前页数
+     * @param pageSize 每页大小
+     * @return
+     */
+    PageInfo<Relation> getRelationInfo(int pageNumber, int pageSize);
+}

+ 10 - 0
sso-server/src/main/java/com/uas/sso/service/UserService.java

@@ -1,5 +1,6 @@
 package com.uas.sso.service;
 
+import com.uas.sso.entity.PageInfo;
 import com.uas.sso.entity.User;
 import com.uas.sso.entity.UserQuestion;
 import com.uas.sso.entity.UserRecord;
@@ -467,4 +468,13 @@ public interface UserService {
      * @return 上周最大uu号(周一算第一天)
      */
     Long getMaxUUInLastWeek();
+
+    /**
+     * 获取用户信息列表
+     * @param pageNumber 修改时间-开始时间
+     * @param pageSize 修改时间-结束时间
+     * @return
+     */
+    PageInfo<User> getUserInfo(int pageNumber, int pageSize);
+
 }

+ 9 - 0
sso-server/src/main/java/com/uas/sso/service/UserspaceService.java

@@ -1,5 +1,6 @@
 package com.uas.sso.service;
 
+import com.uas.sso.entity.PageInfo;
 import com.uas.sso.entity.User;
 import com.uas.sso.entity.Userspace;
 import org.springframework.data.domain.Page;
@@ -255,4 +256,12 @@ public interface UserspaceService {
      * @throws ParseException
      */
     Map<String, Long> countInInputTime(String startTime, String endTime, List<String> fromApps) throws ParseException;
+
+    /**
+     * 分页获取企业信息
+     * @param pageNumber 当前页数
+     * @param pageSize 每页大小
+     * @return
+     */
+    PageInfo<Userspace> getUserspaceInfo(int pageNumber, int pageSize);
 }

+ 31 - 0
sso-server/src/main/java/com/uas/sso/service/impl/RelationServiceImpl.java

@@ -0,0 +1,31 @@
+package com.uas.sso.service.impl;
+
+import com.uas.sso.dao.RelationDao;
+import com.uas.sso.entity.PageInfo;
+import com.uas.sso.entity.Relation;
+import com.uas.sso.service.RelationService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author wangmh
+ * @create 2018-11-07 11:50
+ **/
+@Service
+public class RelationServiceImpl implements RelationService {
+
+    @Autowired
+    private RelationDao relationDao;
+
+    @Override
+    public PageInfo<Relation> getRelationInfo(int pageNumber, int pageSize) {
+        Pageable pageable = PageInfo.pageRequest(pageNumber, pageSize);
+        Page<Relation> relationPage = relationDao.findAll((root, query, cb) -> {
+            query.orderBy(cb.asc(root.get("userUU").as(Long.class)), cb.asc(root.get("spaceUU").as(Long.class)));
+            return null;
+        }, pageable);
+        return new PageInfo<Relation>(relationPage.getContent(), pageable, relationPage.getTotalElements());
+    }
+}

+ 14 - 0
sso-server/src/main/java/com/uas/sso/service/impl/UserServiceImpl.java

@@ -7,6 +7,7 @@ import com.uas.sso.common.util.HttpUtil;
 import com.uas.sso.core.Const;
 import com.uas.sso.core.Status;
 import com.uas.sso.core.Type;
+import com.uas.sso.dao.RelationDao;
 import com.uas.sso.dao.UserDao;
 import com.uas.sso.dao.UserRecordDao;
 import com.uas.sso.entity.*;
@@ -76,6 +77,9 @@ public class UserServiceImpl implements UserService {
     @Autowired
     private TokenService tokenService;
 
+    @Autowired
+    private RelationDao relationDao;
+
     private UserBufferedLogger userLogger = LoggerManager.getLogger(UserBufferedLogger.class);
 
     private SyncBufferedLogger syncLogger = LoggerManager.getLogger(SyncBufferedLogger.class);
@@ -681,6 +685,16 @@ public class UserServiceImpl implements UserService {
         return userDao.findMaxUUBefore(start.getTime());
     }
 
+    @Override
+    public PageInfo<User> getUserInfo(int pageNumber, int pageSize) {
+        Pageable pageable = PageInfo.pageRequest(pageNumber, pageSize);
+        Page<User> users = userDao.findAll((root, query, cb) -> {
+            query.orderBy(cb.asc(root.get("userUU").as(Long.class)));
+            return null;
+        }, pageable);
+        return new PageInfo<User>(users.getContent(), pageable, users.getTotalElements());
+    }
+
     @Override
     public long countByRegisterDate(final Calendar start, final Calendar end) {
         return userDao.count(new Specification<User>() {

+ 10 - 2
sso-server/src/main/java/com/uas/sso/service/impl/UserspaceServiceImpl.java

@@ -30,8 +30,6 @@ import java.text.ParseException;
 import java.util.*;
 import java.util.concurrent.ExecutorService;
 
-import static org.apache.zookeeper.ZooDefs.OpCode.sync;
-
 /**
  * 企业信息service层
  *
@@ -502,4 +500,14 @@ public class UserspaceServiceImpl implements UserspaceService {
         };
         return CountUtils.countInInputTime(countCallBack, startTime, endTime);
     }
+
+    @Override
+    public PageInfo<Userspace> getUserspaceInfo(int pageNumber, int pageSize) {
+        Pageable pageable = PageInfo.pageRequest(pageNumber, pageSize);
+        Page<Userspace> userspacePage = userspaceDao.findAll((root, query, cb) -> {
+            query.orderBy(cb.asc(root.get("spaceUU").as(Long.class)));
+            return null;
+        }, pageable);
+        return new PageInfo<Userspace>(userspacePage.getContent(), pageable, userspacePage.getTotalElements());
+    }
 }