瀏覽代碼

Merge branch 'master' of http://192.168.1.41:3000/SmartCost/YangHuCost

zhangweicheng 5 年之前
父節點
當前提交
9ce5f5f937

+ 80 - 0
modules/users/controllers/cld_controller.js

@@ -11,6 +11,7 @@
 import CLDModel from "../models/cld_model";
 import UserModel from "../models/user_model"
 import CompilationModel from "../models/compilation_model";
+let online_facade = require('../facade/online_facade')
 
 class CLDController {
 
@@ -213,6 +214,85 @@ class CLDController {
             response.json({error: 1, msg: err});
         }
     }
+
+    /**
+     * 获取用户列表分页
+     * @param request
+     * @param response
+     * @returns {Promise<void>}
+     */
+    async getUserList(request, response) {
+        let userModel = new UserModel();
+        let total = 0;
+        let pageSize = 12;
+        let pageData = {};
+        let userList = [];
+        let compilationList =[];
+        let filter = request.query;
+        try {
+            //获取编办列表
+            let  compilationModel = new CompilationModel();
+            compilationList = await compilationModel.getCompilationList({_id: 1, name: 1, is_release: 1});
+            let condition = userModel.getFilterCondition(request);
+            //设置搜索普通用户:
+            condition.user_type = 'normal';
+
+            //获取注册时间
+            let regtime = request.query.regtime;
+            if(regtime !== '' && regtime !== undefined){
+                filter.regtimeMsg = userModel.getDayMsg(regtime);
+            }
+
+            //获取注册时间
+            let loginTime = request.query.loginTime;
+            if(loginTime !== '' && loginTime !== undefined){
+                filter.loginMsg = userModel.getDayMsg(loginTime);
+            }
+
+            // 获取用户总数
+            total = await userModel.count(condition);
+
+            // 分页数据
+            let page = request.query.page === undefined ? 1 : request.query.page;
+            pageSize = request.query.pageSize === undefined ? 12 : parseInt(request.query.pageSize);
+            pageData = {
+                current: page,
+                total: total,
+                queryData: response.locals.urlQuery
+            };
+            console.log(pageData);
+            // console.log("取用户信息=========================");
+            // console.log(condition);
+            // 获取用户列表
+            userList = await userModel.getList(condition, page, pageSize);
+            await online_facade.setOnlineTimes(userList,condition);
+            response.json({error: 0, msg: 'success', data: {
+                userInfo: userList,
+                pageData: pageData,
+                compilationList:compilationList,
+            }});
+        } catch (error) {
+            response.json({error: 1, msg: error});
+        }
+    }
+
+    async getUserOnlineInfo(request, response){
+        let filter = JSON.parse(request.body.data);
+        let responseData = {
+            error: 0,
+            msg: '',
+            data: null
+        };
+        try{
+            let info = await online_facade.getOnlineInfo(filter);
+            responseData.data = info;
+        } catch (error) {
+            console.log(error);
+            responseData.error = error.code;
+            responseData.msg = error.err;
+        }
+        response.json(responseData);
+    }
 }
 
 export default CLDController;

+ 60 - 0
modules/users/facade/online_facade.js

@@ -0,0 +1,60 @@
+/**
+ * Created by zhang on 2019/4/16.
+ */
+
+module.exports = {
+    setOnlineTimes:setOnlineTimes,
+    getOnlineInfo:getOnlineInfo
+};
+
+let mongoose = require("mongoose");
+let logs_model = mongoose.model("online_logs");
+
+async function getOnlineInfo(filter) {
+    let datas = [];
+    let logs = await logs_model.find(filter);
+    let less = 0;
+    for(let l of logs){
+        let d = getTimeString(l.online_times);
+        let online_times = d.s;
+        less += d.less;
+        if(online_times!=""){
+            datas.push({dateString:l.dateString,dateTime:l.online_times,online_times:online_times})
+        }
+    }
+    if(datas.length>1){//大于2个才把不够1分钟的累积到最后一条记录
+        let last =  datas[datas.length - 1];
+        last.online_times = getTimeString(last.dateTime + less).s;
+    }
+
+    return datas;
+}
+
+
+async function setOnlineTimes(userList,condition){
+    for(let u of userList){
+        let filter = {'userID':u._id.toString()};
+        if(u.latest_used) filter["compilationID"] = u.latest_used;
+        if(condition.latest_login && condition.latest_login == ""){
+            let startTime = condition.latest_login['$gte']; //- 24*60*60*1000 //往前推一天  {'$gte': startTime, '$lt': endTime}latest_login
+            filter['dateTime'] = {'$gte': startTime, '$lt':  condition.latest_login['$lt']}
+        }
+        let result =  await logs_model.aggregate([
+            {$match: filter},
+            {$group: {_id: "$userID", total: {$sum: "$online_times"}}}
+        ]);
+        u._doc.filter = JSON.stringify(filter);
+        if(result.length > 0)  u._doc.online_times = getTimeString(result[0].total).s;
+    }
+}
+
+
+function getTimeString(times) {
+    let s = "",perHour = 1000 * 60 * 60,perMin = 1000 * 60;
+    let hour = parseInt(times/perHour);
+    let min = parseInt((times % perHour)/perMin);
+    let less =  (times % perHour)%perMin;//不够一分钟的时间
+    if(hour > 0) s = s+`${hour}小时`;
+    if(min > 0)  s= s+`${min}分钟`;
+    return {s:s,less:less}
+}

+ 14 - 0
modules/users/models/compilation_model.js

@@ -26,6 +26,20 @@ class CompilationModel extends BaseModel {
      *
      * @return {Promise}
      */
+    async getCompilationList(fields = null) {
+        // 筛选字段
+        let field = fields == null ?{_id: 1, name: 1, is_release: 1, categoryID: 1, description: 1,overWriteUrl: 1,example: 1, "ration_valuation.id": 1, "ration_valuation.name": 1, "ration_valuation.enable": 1,
+            "bill_valuation.id": 1, "bill_valuation.name": 1, "bill_valuation.enable": 1}:fields;
+        let compilationData = await this.findDataByCondition({name: {$ne: ''}}, field, false);
+
+        return compilationData === null ? [] : compilationData;
+    }
+
+    /**
+     * 获取编办列表
+     *
+     * @return {Promise}
+     */
     async getList() {
         // 筛选字段
         let field = {_id: 1, name: 1, is_release: 1, description: 1, categoryID: 1};

+ 105 - 0
modules/users/models/user_model.js

@@ -36,6 +36,13 @@ class UserModel extends BaseModel {
      */
     companyScale = ['1-50', '50-100', '100-500', '500+'];
 
+    /**
+     * 最近天数
+     *
+     * @var
+     */
+    dayMsg = ['所有', '最近24小时', '最近3天', '最近7天', '最近30天'];
+
 
     /**
      * 构造函数
@@ -385,6 +392,104 @@ class UserModel extends BaseModel {
         return users;
     }
 
+    /**
+     * 获取列表
+     *
+     * @param {object} condition
+     * @param {number} page
+     * @param {Number} pageSize
+     * @return {promise}
+     */
+    async getList(condition = null, page = 1, pageSize = 30) {
+        page = parseInt(page);
+        page = page <= 1 ? 1 : page;
+        let option = {pageSize: pageSize, offset: parseInt((page - 1) * pageSize), sort: {_id:-1}};
+
+        let userList = await this.db.find(condition, null, option);
+        userList = userList.length > 0 ? userList : [];
+
+        return userList;
+    }
+
+    /**
+     * 获取过滤条件
+     *
+     * @return {Object}
+     */
+    getFilterCondition(request) {
+        let condition = {};
+        let regtime = request.query.regtime;
+        regtime = regtime !== '' && regtime !== undefined ? parseInt(regtime) : 0;
+        if (regtime !== 0) {
+            condition.create_time = this.getTimestamp(regtime);
+        }
+
+        //最近登录时间
+        let loginTime = request.query.loginTime;
+        loginTime = loginTime !== '' && loginTime !== undefined ? parseInt(loginTime) : 0;
+        if (loginTime !== 0) {
+            condition.latest_login = this.getTimestamp(loginTime);
+        }
+
+        let version = request.query.version;
+        if(version !== '' && version !== undefined) {
+            condition.version = version;
+        }
+        // 已升级费用定额
+        let upGrade = request.query.upGrade;
+        if(upGrade !== '' && upGrade !== undefined){
+            condition.upgrade_list = {"$elemMatch":{"compilationID":upGrade,"isUpgrade":true}};
+        }
+
+        // 最近使用费用定额
+        let latestUsed = request.query.latestUsed;
+        if(latestUsed !== '' && latestUsed !== undefined){
+            condition.latest_used = latestUsed;
+        }
+
+        let keyword = request.query.keyword;
+        if (keyword !== '' && keyword !== undefined) {
+            condition.$or = [{real_name : {$regex: keyword}},{email : {$regex: keyword}},{mobile : {$regex: keyword}},{company : {$regex: keyword}}];
+        }
+
+        return condition;
+    }
+
+    /**
+     * 获取时间戳区间
+     *
+     * @return {Object}
+     */
+    getTimestamp(type) {
+        let startTime = '';
+        switch (type) {
+            case 1 :
+                startTime = Date.parse(new Date())-86400*1000;
+                break;
+            case 2 :
+                startTime = Date.parse(new Date())-86400*1000*3;
+                break;
+            case 3 :
+                startTime = Date.parse(new Date())-86400*1000*7;
+                break;
+            case 4 :
+                startTime = Date.parse(new Date())-86400*1000*30;
+                break;
+            default :
+                break;
+        }
+        let endTime =  Date.parse(new Date());
+        return startTime === '' ? '' : {'$gte': startTime, '$lt': endTime};
+    }
+
+    /**
+     * 获取daymsg
+     *
+     */
+    getDayMsg(index){
+        return this.dayMsg[index];
+    }
+
 }
 
 export default UserModel;

+ 4 - 0
modules/users/routes/cld_route.js

@@ -26,5 +26,9 @@ module.exports = function (app) {
 
     router.get('/getUsersInfo', cldController.getUsersInfo);
 
+    router.get('/getUserList', cldController.getUserList);
+
+    router.get('/getUserOnlineInfo', cldController.getUserOnlineInfo);
+
     app.use('/cld',router)
 };