Преглед на файлове

统计指定时间和应用新增企业和个人数接口
统计指定时间登录个人数接口
统计指定月份前未登录人数接口

huyy преди 7 години
родител
ревизия
7b9af33036

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

@@ -13,6 +13,7 @@ import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
 import java.io.*;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
 
@@ -443,6 +444,17 @@ public class UserManagerController extends BaseController {
         return new ModelMap("count", userService.count());
     }
 
+    /**
+     * 统计指定应用个人用户总数
+     * @param fromApps
+     * @return
+     */
+    @RequestMapping(value = "/count/apps",method = RequestMethod.GET)
+    public ModelMap countForApp(String fromApps){
+        String[] apps = fromApps.split(",");
+        return success(userService.count(new ArrayList<>(Arrays.asList(apps))));
+    }
+
     /**
      * 获取本月用户注册数量
      *
@@ -523,8 +535,8 @@ public class UserManagerController extends BaseController {
 
     /**
      * 获取指定应用前一天注册数量
-     * @param fromApps 应用id,逗号分隔
      *
+     * @param fromApps 应用id,逗号分隔
      * @return
      */
     @RequestMapping(value = "/yesterday/count/app", method = RequestMethod.GET)
@@ -545,6 +557,32 @@ public class UserManagerController extends BaseController {
         return success(userService.countgInLastMonth(new ArrayList<>(Arrays.asList(apps))));
     }
 
+    @RequestMapping(value = "/inputTime/count/apps", method = RequestMethod.GET)
+    public ModelMap countInInputTime(String start, String end, String fromApps) {
+        String[] apps = fromApps.split(",");
+        try {
+            return success(userService.countInInputTime(start, end, new ArrayList<>(Arrays.asList(apps))));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+    /**
+     * 统计指定时间内个人用户登录总数
+     */
+    @RequestMapping(value = "/count/login", method = RequestMethod.GET)
+    public ModelMap countByLogin(String start,String end) throws ParseException {
+        return new ModelMap("count", userService.countByLogin(start,end));
+    }
+
+    /**
+     * 统计指定时间内个人用户登录总数
+     */
+    @RequestMapping(value = "/count/notlogin", method = RequestMethod.GET)
+    public ModelMap countByNotLogin(int month) throws ParseException {
+        return new ModelMap("count", userService.countByNotLogin(month));
+    }
+
     /**
      * 根据用户IMID获取女用户信息
      *

+ 35 - 1
sso-server/src/main/java/com/uas/sso/controller/UserspaceManagerController.java

@@ -8,10 +8,12 @@ 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;
@@ -23,6 +25,7 @@ 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;
@@ -346,6 +349,7 @@ public class UserspaceManagerController extends BaseController {
 
     /**
      * 从其他应用注册企业信息
+     *
      * @param userspace 企业信息
      */
     @RequestMapping(value = "/register/other", method = RequestMethod.POST)
@@ -371,6 +375,7 @@ public class UserspaceManagerController extends BaseController {
 
     /**
      * 商城分页查询申请信息
+     *
      * @param page
      * @param size
      * @param speaceUU
@@ -380,7 +385,7 @@ public class UserspaceManagerController extends BaseController {
     @ResponseBody
     public ModelMap findApplyAllToMall(@RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int size, Long speaceUU, Integer status, String keyword) {
         if (speaceUU == null) {
-            return error(Const.SPACEUU_PERSONAL+"", "个人账号");
+            return error(Const.SPACEUU_PERSONAL + "", "个人账号");
         }
         // 查询页面是从0开始,所以要减1
         return success(applyUserSpaceService.findApplyAllToMall(page, size, speaceUU, status, keyword));
@@ -388,6 +393,7 @@ public class UserspaceManagerController extends BaseController {
 
     /**
      * 审核申请
+     *
      * @param userUU 用户uu号
      * @return
      */
@@ -406,8 +412,16 @@ public class UserspaceManagerController extends BaseController {
         return new ModelMap("count", userspaceService.count());
     }
 
+    @RequestMapping(value = "/count/apps", method = RequestMethod.GET)
+    public ModelMap count(String fromApps) {
+        String[] apps = fromApps.split(",");
+        return success(userspaceService.countByapps(new ArrayList<>(Arrays.asList(apps))));
+    }
+
+
     /**
      * 获取本月企业注册数量
+     *
      * @return
      */
     @RequestMapping(value = "/currentMonth/count", method = RequestMethod.GET)
@@ -417,6 +431,7 @@ public class UserspaceManagerController extends BaseController {
 
     /**
      * 获取上个月企业注册数量
+     *
      * @return
      */
     @RequestMapping(value = "/lastMonth/count", method = RequestMethod.GET)
@@ -426,6 +441,7 @@ public class UserspaceManagerController extends BaseController {
 
     /**
      * 获取上个月企业注册数量
+     *
      * @return
      */
     @RequestMapping(value = "/currentWeek/count", method = RequestMethod.GET)
@@ -433,4 +449,22 @@ public class UserspaceManagerController extends BaseController {
         return new ModelMap("count", userspaceService.countInCurrentWeek());
     }
 
+    /**
+     * 获取任意时间企业注册数量
+     *
+     * @param start
+     * @param end
+     * @param fromApps
+     * @return
+     */
+    @RequestMapping(value = "/inputTime/count/apps", method = RequestMethod.GET)
+    public ModelMap countInInputTime(String start, String end, String fromApps) {
+        String[] apps = fromApps.split(",");
+        try {
+            return success(userspaceService.countInInputTime(start, end, new ArrayList<>(Arrays.asList(apps))));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
 }

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

@@ -6,6 +6,10 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 
+import java.sql.Timestamp;
+import java.util.List;
+import java.util.Map;
+
 /**
  * 用户登录记录Dao
  *
@@ -20,4 +24,13 @@ public interface UserRecordDao extends JpaRepository<UserRecord, Long>, JpaSpeci
     @Modifying
     @Query("update UserRecord u set u.pwdErrorCount = 0")
     void clearPwdErrorCount();
+
+    /**
+     * 统计登录个人用户数
+     * @param start
+     * @param end
+     * @return
+     */
+    @Query("select count(u) from UserRecord u where u.lastLoginTime between ?1 and ?2")
+    Long getCountByLogin(Timestamp start, Timestamp end);
 }

+ 20 - 0
sso-server/src/main/java/com/uas/sso/dao/UserspaceDao.java

@@ -11,7 +11,9 @@ import org.springframework.data.jpa.repository.QueryHints;
 import org.springframework.data.repository.query.Param;
 
 import javax.persistence.QueryHint;
+import java.sql.Timestamp;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -102,4 +104,22 @@ public interface UserspaceDao extends JpaRepository<Userspace, Long>, JpaSpecifi
 
     @Query("select t from Userspace t where t.spaceUU > 20000000")
     List<Userspace> findtest();
+
+    /**
+     * 指定时间查询企业注册数
+     * @param start
+     * @param end
+     * @param fromApps
+     * @return
+     */
+    @Query("select t.fromApp as appId , count(t) as count from Userspace t where t.fromApp in ?3 and t.registerDate between ?1 and ?2 group by t.fromApp")
+    List<Map<String, Object>> getCountByRegisterDate(Timestamp start, Timestamp end, List<String> fromApps);
+
+    /**
+     * 获取指定应用所有企业注册量
+     * @param fromApps 应用集合
+     * @return
+     */
+    @Query("select t.fromApp as appId , count(t) as count from Userspace t where t.fromApp in ?1 group by t.fromApp")
+    List<Map<String,Object>> getCountByApps(List<String> fromApps);
 }

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

@@ -8,6 +8,7 @@ import com.uas.sso.foreign.entity.ForeignInfo;
 import org.springframework.data.domain.Page;
 
 import java.sql.Timestamp;
+import java.text.ParseException;
 import java.util.Calendar;
 import java.util.List;
 import java.util.Map;
@@ -273,6 +274,15 @@ public interface UserService {
      */
     long count();
 
+    /**
+     * 指定时间获取个人用户登录总数
+     * @param start
+     * @param end
+     * @return
+     * @throws ParseException
+     */
+    Long countByLogin(String start, String end) throws ParseException;
+
     /**
      * 统计某个时间段注册数量
      * @param start 开始时间
@@ -350,6 +360,15 @@ public interface UserService {
      */
     Map<String, Long> countgInLastMonth(List<String> fromApps);
 
+    /**
+     * 获取任何时间注册数
+     * @param startTime
+     * @param endTime
+     * @param fromApps
+     * @return
+     */
+    Map<String, Long> countInInputTime(String startTime,String endTime,List<String> fromApps) throws ParseException;
+
     /**
      * 根据微信用户unionID获取用户信息
      * @param unionid 用户unionID
@@ -424,4 +443,12 @@ public interface UserService {
      * @return 用户信息
      */
     User findByImId(String imId);
+
+    /**
+     * 统计指定月份前未登录数量
+     *
+     * @param month
+     * @return
+     */
+    long countByNotLogin(int month);
 }

+ 66 - 16
sso-server/src/main/java/com/uas/sso/service/UserspaceService.java

@@ -4,8 +4,11 @@ import com.uas.sso.entity.User;
 import com.uas.sso.entity.Userspace;
 import org.springframework.data.domain.Page;
 
+import java.sql.Timestamp;
+import java.text.ParseException;
 import java.util.Calendar;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 企业service
@@ -17,16 +20,18 @@ public interface UserspaceService {
 
     /**
      * 企业注册,并开通默认应用
+     *
      * @param userspace 企业信息
-     * @param appId 应用id,记录注册来源
+     * @param appId     应用id,记录注册来源
      * @return 注册后的企业信息
      */
     Userspace register(Userspace userspace, String appId);
 
     /**
      * 企业注册,并开通默认应用
-     * @param userspace 企业信息
-     * @param appId 应用id,记录注册来源
+     *
+     * @param userspace    企业信息
+     * @param appId        应用id,记录注册来源
      * @param isSyncSource 是否同步到来源应用
      * @return 注册后的企业信息
      */
@@ -34,12 +39,14 @@ public interface UserspaceService {
 
     /**
      * 校验企业名称
+     *
      * @param spaceName 企业名称
      */
     void checkSpaceName(String spaceName);
 
     /**
      * 校验企业名称
+     *
      * @param businessCode 企业营业执照号
      */
     void checkBusinessCode(String businessCode);
@@ -47,8 +54,7 @@ public interface UserspaceService {
     /**
      * 查找企业详细信息
      *
-     * @param domain
-     *            域名
+     * @param domain 域名
      * @return
      */
     Userspace findByDomain(String domain);
@@ -64,36 +70,37 @@ public interface UserspaceService {
     /**
      * 校验营业执照号是否被验证
      *
-     * @author wangmh
-     * @date 2018/1/11 9:56
      * @param businessCode 营业执照号
      * @return true:认证,false:未认证
+     * @author wangmh
+     * @date 2018/1/11 9:56
      */
     boolean businessCodeIsValid(String businessCode);
 
     /**
      * 认证信息
      *
+     * @param validSpace 认证企业
+     * @param userspace  认证企业提交的信息(不是企业完整的信息)
+     * @param submitter  申请人
      * @author wangmh
      * @date 2018/1/11 14:23
-     * @param validSpace 认证企业
-     * @param userspace 认证企业提交的信息(不是企业完整的信息)
-     * @param submitter 申请人
      */
     void submitValidInfo(Userspace validSpace, Userspace userspace, User submitter);
 
     /**
      * 根据企业uu号查找企业信息
      *
-     * @author wangmh
-     * @date 2018/1/15 13:47
      * @param spaceUU 企业uu号
      * @return 企业信息
+     * @author wangmh
+     * @date 2018/1/15 13:47
      */
     Userspace findOne(Long spaceUU);
 
     /**
      * 查询企业名称
+     *
      * @param keyword
      * @param number
      * @return
@@ -102,6 +109,7 @@ public interface UserspaceService {
 
     /**
      * 根据企业名查询企业
+     *
      * @param spaceName 企业名称
      * @return
      */
@@ -109,34 +117,39 @@ public interface UserspaceService {
 
     /**
      * 企业解除绑定应用
+     *
      * @param spaceUU 企业uu号
-     * @param appId 应用id
+     * @param appId   应用id
      */
     void unbindApp(Long spaceUU, String appId);
 
     /**
      * 企业开通应用
+     *
      * @param spaceUU 企业uu号
-     * @param appId 应用id
+     * @param appId   应用id
      */
     void bindApp(Long spaceUU, String appId);
 
     /**
      * 根据企业营业执照号获取企业信息
+     *
      * @param businessCode 企业营业执照号
      * @return
      */
-     Userspace findByBusinessCode(String businessCode);
+    Userspace findByBusinessCode(String businessCode);
 
     /**
      * 向企业添加用户
+     *
      * @param userspace 企业信息
-     * @param users 用户信息
+     * @param users     用户信息
      */
     void addUser(Userspace userspace, List<User> users);
 
     /**
      * 保存企业信息
+     *
      * @param userspace 企业信息
      * @return
      */
@@ -144,6 +157,7 @@ public interface UserspaceService {
 
     /**
      * 查找出重复的企业名称
+     *
      * @return
      */
     List<String> findRepeatName();
@@ -152,6 +166,7 @@ public interface UserspaceService {
 
     /**
      * 根据id搜索企业信息
+     *
      * @param ids
      * @return
      */
@@ -159,6 +174,7 @@ public interface UserspaceService {
 
     /**
      * 更换管理员
+     *
      * @param appId
      * @param space
      * @param afterAdmin
@@ -167,6 +183,7 @@ public interface UserspaceService {
 
     /**
      * 根据关键字查询企业信息
+     *
      * @param keyword
      * @param pageNumber
      * @param pageSize
@@ -176,33 +193,66 @@ public interface UserspaceService {
 
     /**
      * 获取企业数量
+     *
      * @return
      */
     long count();
 
+    /**
+     * 统计指定应用用户总数
+     * @param fromApps
+     * @return
+     */
+    Map<String,Long> countByapps(List<String> fromApps);
+
     /**
      * 根据注册时间统计企业注册数量
+     *
      * @param start
      * @param end
      * @return
      */
     long getCountByRegisterDate(Calendar start, Calendar end);
 
+    /**
+     * 指定应用,根据注册时间统计企业注册数量
+     *
+     * @param start
+     * @param end
+     * @param fromAppps
+     * @return
+     */
+    Map<String, Long> countByRegisterDate(Timestamp start, Timestamp end, List<String> fromAppps);
+
     /**
      * 获取当前月企业注册量
+     *
      * @return
      */
     long countInCurrentMonth();
 
     /**
      * 获取上个月企业注册量
+     *
      * @return
      */
     long countInLastMonth();
 
     /**
      * 获取本周
+     *
      * @return
      */
     long countInCurrentWeek();
+
+    /**
+     * 获取任何时间注册数
+     *
+     * @param startTime
+     * @param endTime
+     * @param fromApps
+     * @return
+     * @throws ParseException
+     */
+    Map<String, Long> countInInputTime(String startTime, String endTime, List<String> fromApps) throws ParseException;
 }

+ 13 - 10
sso-server/src/main/java/com/uas/sso/service/impl/LoginServiceImpl.java

@@ -7,29 +7,29 @@ import com.uas.sso.SSOHelper;
 import com.uas.sso.SSOToken;
 import com.uas.sso.common.util.HttpUtil;
 import com.uas.sso.core.Const;
-import com.uas.sso.entity.App;
+import com.uas.sso.dao.UserRecordDao;
+import com.uas.sso.entity.*;
 import com.uas.sso.entity.login.*;
-import com.uas.sso.entity.Token;
-import com.uas.sso.entity.User;
-import com.uas.sso.entity.UserAccount;
 import com.uas.sso.exception.PasswordErrorException;
 import com.uas.sso.exception.VisibleError;
 import com.uas.sso.foreign.entity.ForeignInfo;
 import com.uas.sso.foreign.factory.ForeignFactory;
 import com.uas.sso.foreign.service.ForeignService;
-import com.uas.sso.service.AppService;
-import com.uas.sso.service.LoginService;
-import com.uas.sso.service.PersonalAccountService;
-import com.uas.sso.service.TokenService;
-import com.uas.sso.service.UserAccountService;
-import com.uas.sso.service.UserService;
+import com.uas.sso.i.CountCallBack;
+import com.uas.sso.service.*;
+import com.uas.sso.util.CountUtils;
 import com.uas.sso.util.PasswordLevelUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+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 javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.util.ArrayList;
@@ -67,6 +67,9 @@ public class LoginServiceImpl implements LoginService {
 
     @Autowired
     protected HttpServletResponse response;
+
+    @Autowired
+    protected UserRecordDao userRecordDao;
     /**
      * 密码输错3次
      */

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

@@ -39,6 +39,8 @@ import javax.persistence.Version;
 import javax.persistence.criteria.*;
 import javax.validation.constraints.NotNull;
 import java.sql.Timestamp;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.concurrent.ExecutorService;
 
@@ -639,6 +641,18 @@ public class UserServiceImpl implements UserService {
         return userDao.count();
     }
 
+    @Override
+    public Long countByLogin(String start, String end) throws ParseException {
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+        Date startTime = simpleDateFormat.parse(start);
+        Date endTime = simpleDateFormat.parse(end);
+        Calendar starttime = Calendar.getInstance();
+        starttime.setTime(startTime);
+        Calendar endtime = Calendar.getInstance();
+        endtime.setTime(endTime);
+        return userRecordDao.getCountByLogin(new Timestamp(starttime.getTimeInMillis()),new Timestamp(endtime.getTimeInMillis()));
+    }
+
     @Override
     public long countByRegisterDate(final Calendar start, final Calendar end) {
         return userDao.count(new Specification<User>() {
@@ -760,6 +774,17 @@ public class UserServiceImpl implements UserService {
         });
     }
 
+    @Override
+    public Map<String, Long> countInInputTime(String startTime, String endTime, List<String> fromApps) throws ParseException {
+        CountCallBack<Map<String, Long>> countCallBack = new CountCallBack<Map<String, Long>>() {
+            @Override
+            public Map<String, Long> countByTime(Calendar start, Calendar end) {
+                return countByRegisterDate(new Timestamp(start.getTimeInMillis()),new Timestamp(end.getTimeInMillis()),fromApps);
+            }
+        };
+        return CountUtils.countInInputTime(countCallBack,startTime,endTime);
+    }
+
     @Override
     public User findByWxUnionid(String unionid) {
         return userDao.findByWxUnionid(unionid);
@@ -1002,4 +1027,24 @@ public class UserServiceImpl implements UserService {
             });
         }
     }
+
+    @Override
+    public long countByNotLogin(int month) {
+        return CountUtils.countBeforeInputMonth(new CountCallBack<Long>() {
+            @Override
+            public Long countByTime(Calendar start, Calendar end) {
+                return countBeforeTime(end);
+            }
+        }, month);
+    }
+
+    private long countBeforeTime(Calendar end) {
+        return userRecordDao.count((root, query, cb) -> {
+            Predicate lessPredicate = cb.lessThan(root.get("lastLoginTime").as(Calendar.class), end);
+            Predicate nullPredicate = cb.isNull(root.get("lastLoginTime"));
+            query.where(cb.or(lessPredicate, nullPredicate));
+            return null;
+        });
+    }
+
 }

+ 43 - 6
sso-server/src/main/java/com/uas/sso/service/impl/UserspaceServiceImpl.java

@@ -26,6 +26,7 @@ import org.springframework.util.StringUtils;
 
 import javax.persistence.criteria.*;
 import java.sql.Timestamp;
+import java.text.ParseException;
 import java.util.*;
 import java.util.concurrent.ExecutorService;
 
@@ -135,9 +136,10 @@ public class UserspaceServiceImpl implements UserspaceService {
 
     /**
      * 同步企业信息到其他应用
+     *
      * @param userSpaceView 企业信息
-     * @param msg 同步日志信息
-     * @param otherApp 需要同步的其他应用
+     * @param msg           同步日志信息
+     * @param otherApp      需要同步的其他应用
      */
     private void syncUserSpaceInfo(UserSpaceView userSpaceView, String msg, App otherApp) {
         syncUserSpaceInfo(userSpaceView, msg, otherApp, null);
@@ -146,10 +148,11 @@ public class UserspaceServiceImpl implements UserspaceService {
     /**
      * 同步企业信息到其他应用
      * 如果需要同步的应用和不需要同步的应用相同,则不同步改应用
+     *
      * @param userSpaceView 企业信息
-     * @param msg 同步日志信息
-     * @param otherApp 需要同步的其他应用
-     * @param noSyncApp 不需要同步的应用
+     * @param msg           同步日志信息
+     * @param otherApp      需要同步的其他应用
+     * @param noSyncApp     不需要同步的应用
      */
     private void syncUserSpaceInfo(final UserSpaceView userSpaceView, final String msg, App otherApp, App noSyncApp) {
         // 封装数据
@@ -239,7 +242,7 @@ public class UserspaceServiceImpl implements UserspaceService {
     public void checkSpaceName(String spaceName) {
         Userspace userSpace = userspaceDao.findBySpaceName(spaceName);
         if (userSpace != null) {
-            throw new VisibleError("企业已被注册,请确认无误后联系管理员("+userSpace.getAdmin().getVipName()+")处理");
+            throw new VisibleError("企业已被注册,请确认无误后联系管理员(" + userSpace.getAdmin().getVipName() + ")处理");
         }
     }
 
@@ -424,6 +427,16 @@ public class UserspaceServiceImpl implements UserspaceService {
         return userspaceDao.count();
     }
 
+    @Override
+    public Map<String, Long> countByapps(final List<String> fromApps) {
+        Map<String, Long> data = new HashMap<>();
+        List<Map<String, Object>> counts = userspaceDao.getCountByApps(fromApps);
+        for(Map<String, Object> count : counts){
+            data.put((String) count.get("appId"),(Long) count.get("count"));
+        }
+        return data;
+    }
+
     @Override
     public long getCountByRegisterDate(final Calendar start, final Calendar end) {
         return userspaceDao.count(new Specification<Userspace>() {
@@ -436,6 +449,20 @@ public class UserspaceServiceImpl implements UserspaceService {
         });
     }
 
+    @Override
+    public Map<String, Long> countByRegisterDate(Timestamp start, Timestamp end, List<String> fromApps) {
+        Map<String, Long> data = new HashMap<>();
+        List<Map<String, Object>> Counts = userspaceDao.getCountByRegisterDate(start, end, fromApps);
+        for (Map<String, Object> Count : Counts) {
+            data.put((String) Count.get("appId"), (Long) Count.get("count"));
+            fromApps.remove(Count.get("appId"));
+        }
+        for (String app : fromApps) {
+            data.put(app, 0L);
+        }
+        return data;
+    }
+
     @Override
     public long countInCurrentMonth() {
         return CountUtils.countInCurrentMonth(new CountCallBack<Long>() {
@@ -466,4 +493,14 @@ public class UserspaceServiceImpl implements UserspaceService {
         });
     }
 
+    @Override
+    public Map<String, Long> countInInputTime(String startTime, String endTime, List<String> fromApps) throws ParseException {
+        CountCallBack<Map<String, Long>> countCallBack = new CountCallBack<Map<String, Long>>() {
+            @Override
+            public Map<String, Long> countByTime(Calendar start, Calendar end) {
+                return countByRegisterDate(new Timestamp(start.getTimeInMillis()), new Timestamp(end.getTimeInMillis()), fromApps);
+            }
+        };
+        return CountUtils.countInInputTime(countCallBack, startTime, endTime);
+    }
 }

+ 21 - 6
sso-server/src/main/java/com/uas/sso/util/CountUtils.java

@@ -86,6 +86,27 @@ public class CountUtils {
         return countCallBack.countByTime(start, end);
     }
 
+    public static <T> T countBeforeInputMonth(CountCallBack<T> countCallBack, int month) {
+        Calendar start = Calendar.getInstance();
+        start.setTime(todayStartTime());
+        Calendar end = Calendar.getInstance();
+        end.setTime(todayStartTime());
+        end.add(Calendar.MONTH, month);
+        return countCallBack.countByTime(start, end);
+    }
+
+
+    public static <T> T countInInputTime(CountCallBack<T> countCallBack, String startTime, String endTime) throws ParseException {
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+        Date startToDate = simpleDateFormat.parse(startTime);
+        Date endToDate = simpleDateFormat.parse(endTime);
+        Calendar start = Calendar.getInstance();
+        start.setTime(startToDate);
+        Calendar end = Calendar.getInstance();
+        end.setTime(endToDate);
+        return countCallBack.countByTime(start, end);
+    }
+
     private static Date todayStartTime() {
         Calendar todayStart = Calendar.getInstance();
         todayStart.set(Calendar.HOUR_OF_DAY, 0);
@@ -104,11 +125,5 @@ public class CountUtils {
         return todayEnd.getTime();
     }
 
-    private static Date changeToDate(String input) throws ParseException {
-        String date = input;
-        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
-        Date time = simpleDateFormat.parse(date);
-        return new Timestamp(time.getTime());
-    }
 
 }