API Docs for:
Show:

File: ../../src/netease/icp/backend/controllers/Controllers.js

var assert = require('assert');
var logger = using('easynode.framework.Logger').forFile(__filename);
var GenericObject = using('easynode.GenericObject');
var fs = require('co-fs');
var multipart = require('co-multipart');
var f =  require('fs');
var util = require('util');
var thunkify = require('thunkify');
var LoginService = using('netease.icp.backend.services.LoginService');
var FileService =  using('easynode.framework.util.FileService');
var StoreService = using('netease.icp.backend.services.StoreService');

(function () {

    // Myself result code
    const LOGIN_OK = 200;
    const LOGIN_ERR = 201;

    /**
     * Class Controllers
     *
     * @class netease.icp.Controllers
     * @extends easynode.GenericObject
     * @since 0.1.0
     * @author allen.hu
     * */
    class Controllers extends GenericObject
    {
        /**
         * 构造函数。
         *
         * @method 构造函数
         * @since 0.1.0
         * @author allen.hu
         * */
        constructor()
        {
            super();
            //调用super()后再定义子类成员。
        }

        /**
         * @apiDefine EmptyRecord
         * @apiError EmptyRecord Please login again or register an aacount, maybe the session is expired
         *
         * @apiErrorExample Empty-Response:
         *
         *          { rows:0, pages:0, page:0, rpp:0, data:[] };
         *
         */

        static home(app){
            return function *(){
                var user = this.session.user || undefined;
                yield this.render('index',{user:user,loginCallback:app.config.loginCallback});
            }
        }

        static logout(app){
            return function *(){
                this.session.user = null;

                yield this.render('index',{user:{},loginCallback:app.config.loginCallback});
            }
        }

        static comment(app){
            return function *(){

                var parts = yield* multipart(this);
                console.dir(parts);

                let profile = this.request.body;
                console.log(profile);
                console.log( this.parameter );
                console.log( this.body );
                console.log( this.query );

                this.type = 'json';
                this.body = [
                    {"author": "Pete Hunt", "text": "This is one comment"},
                    {"author": "Jordan Walke", "text": "This is *another* comment"}
                ];
            }
        }



        /**
         * @api {post} /records 创建申请记录
         * @apiName createRecord
         * @apiGroup Record
         * @apiPermission admin or self
         * @apiVersion 0.0.1
         * @apiDescription 用户登录后,创建申请记录
         *
         * @apiParam {Number} id 记录id.
         *
         * @apiSampleRequest http://icp.hzspeed.cn/records/
         *
         * @apiParam {Object} baseinfo 记录baseinfo部分
         * @apiParam {Number} baseinfo.id 记录id
         * @apiParam {Number} baseinfo.type 备案类型:\n0-首次备案\n1-新增网站\n2-新增接入
         * @apiParam {Number} baseinfo.status  审核状态 0
         *
         * @apiParam {Object} material 记录material部分
         * @apiParam {Number} material.sitemanagerurl 主体单位负责人图片URL
         * @apiParam {String} material.checklisturl 核验单图片URL
         * @apiParam {String} material.protocolurl1 云平台服务协议第一页l图片URL
         * @apiParam {String} material.protocolurl2 云平台服务协议第二页图片URL
         * @apiParam {String} material.securityurl1 信息安全管理责任书第一页图片URL
         * @apiParam {String} material.securityurl2 信息安全管理责任书第二页图片URL
         *
         * @apiSuccess {Object} comapnyinfo 公司信息
         * @apiSuccess {Number} comapny.id 公司ID
         * @apiSuccess {String} comapny.province 省
         * @apiSuccess {String} comapny.city 市
         * @apiSuccess {String} comapny.area 区
         * @apiSuccess {Number} comapny.nature 性质 \n1-军队\n2-政府机关\n3-事业单位\n4-企业\n5-个人\n
         * @apiSuccess {Number} comapny.idtype 证件类型\n1-工商执照\n2-组织机构代码
         * @apiSuccess {String} comapny.idnumber 证件号码
         * @apiSuccess {String} comapny.name 名称
         * @apiSuccess {String} comapny.liveaddress 居住地址
         * @apiSuccess {String} comapny.commaddress 通讯地址
         * @apiSuccess {String} comapny.owner 投资人或主管单位名称
         * @apiSuccess {String} comapny.managername 法人姓名
         * @apiSuccess {Number} comapny.manageridtype 法人证件类型\n性质 \n1-军队\n2-政府机关\n3-事业单位\n4-企业\n5-个人\n
         * @apiSuccess {String} comapny.manageridnumber 法人证件号码
         * @apiSuccess {String} comapny.officephoneregion 办公室电话区号
         * @apiSuccess {String} comapny.officephonenumber 办公室电话号码
         * @apiSuccess {String} comapny.mobile 手机号码
         * @apiSuccess {String} comapny.email 电子邮箱
         * @apiSuccess {String} comapny.recordnumber 主体备案号
         *
         * @apiSuccess {Object} siteinfo 网站
         * @apiSuccess {Number} website.id 网站ID
         * @apiSuccess {String} website.name 网站名称
         * @apiSuccess {String} website.domain 网站域名
         * @apiSuccess {String} website.domain1 网站域名1
         * @apiSuccess {String} website.domain2 网站域名2
         * @apiSuccess {String} website.domain3 网站域名3
         * @apiSuccess {String} website.domain4 网站域名4
         * @apiSuccess {String} website.homeurl 网站首页URL
         * @apiSuccess {String} website.servicecontent 网站服务内容
         * @apiSuccess {Object} website.languages 网站语言,json结构
         {
             chinese: true,
             chinesetraditional: false,
             eglish: false,
             japanese: false,
             french: false,
             spanish: false,
             arabic: false,
             russian: false,
             customize: false,
             customizeLang: ''
         }
         * @apiSuccess {String} website.ispname ISP名称
         * @apiSuccess {Object} website.ip 网站IP地址:
         {
            ip1:"",
            ip2:"",
            ip3:"",
            ip4:""
         }
         * @apiSuccess {Object} website.accessmethod 网站接入方式,json结构
         {
             specialline: false,
             webhost: false,
             virtualhost: true,
             other: false
         }
         * @apiSuccess {String} website.serverregion 服务器放置地
         *
         * @apiSuccess {String} website.managername 负责人姓名
         * @apiSuccess {Number} website.manageridtype 证件类型:1-身分证 2-护照 3-军官证 4-台胞证
         * @apiSuccess {String} website.manageridnumber 证件号码
         * @apiSuccess {String} website.officephoneregion 办公室电话区号
         * @apiSuccess {String} website.officephonenumber 办公室电话号码
         * @apiSuccess {String} website.mobile 手机号码
         * @apiSuccess {String} website.email 电子邮箱
         * @apiSuccess {String} website.qq qq号码
         *
         * @apiUse EmptyRecord
         */
        static createRecord(app){
            var me = this;
            return function *(){

                var ret = {};
                var session = this.session;

                var storeService = new StoreService(app)
                ret = yield storeService.createRecord();

                this.type = 'json';
                this.body = {ret: ret};
            }
        }


        static savedraft(app){
            var me = this;
            return function *(){
                var session = this.session;

                var ret = {};

                var storeService = new StoreService(app)
                ret = yield storeService.savedraft(this.request.body);

                this.type = 'json';
                this.body = {ret: ret};
            }
        }



        /**
         * @api {get} /record 获取记录详情
         * @apiName getRecord
         * @apiGroup Record
         * @apiPermission admin or self
         * @apiVersion 0.0.2
         * @apiDescription 管理员(登录后用户对象里用idadmin字段表示)能获取所有用户申请记录详情,本用户只能获取他自己的申请记录详情
         *
         * @apiParam {Number} id 记录id.
         *
         * @apiSampleRequest http://icp.hzspeed.cn/record/?id
         *
         * @apiSuccess {Object} record 记录
         * @apiSuccess {Number} record.id 记录id
         * @apiSuccess {Number} record.type 备案类型:\n0-首次备案\n1-新增网站\n2-新增接入
         * @apiSuccess {String} record.serverregion 主机区域
         * @apiSuccess {Number} record.companyid 公司id
         * @apiSuccess {Number} record.websiteid 网站id
         * @apiSuccess {String} record.sitemanagerurl 主体单位负责人图片URL
         * @apiSuccess {String} record.checklisturl 核验单图片URL
         * @apiSuccess {String} record.protocolurl1 云平台服务协议第一页l图片URL
         * @apiSuccess {String} record.protocolurl2 云平台服务协议第二页图片URL
         * @apiSuccess {String} record.securityurl1 信息安全管理责任书第一页图片URL
         * @apiSuccess {String} record.securityurl2 信息安全管理责任书第二页图片URL
         * @apiSuccess {String} record.code 备案号
         * @apiSuccess {Number} record.status 备案申请状态\n0-草稿\n1-初审中\n2-初审未通过\n3-初审已通过\n4-照片审核中\n5-照片审核未通过\n6-照片审核已通过\n7-通管局审核中\n8-通管局审核未通过\n9-通管局审核已通过\n10-未知状态\n
         * @apiSuccess {String} record.tenantid 租户ID
         * @apiSuccess {String} record.curtainurl 帘布照片URL
         * @apiSuccess {Number} record.updatetime 记录更新时间
         * @apiSuccess {Number} record.createtime 记录创建时间
         *
         * @apiSuccess {Object} comapny 记录
         * @apiSuccess {Number} comapny.id 公司ID
         * @apiSuccess {String} comapny.province 省
         * @apiSuccess {String} comapny.city 市
         * @apiSuccess {String} comapny.area 区
         * @apiSuccess {Number} comapny.nature 性质 \n1-军队\n2-政府机关\n3-事业单位\n4-企业\n5-个人\n
         * @apiSuccess {Number} comapny.idtype 证件类型\n1-工商执照\n2-组织机构代码
         * @apiSuccess {String} comapny.idnumber 证件号码
         * @apiSuccess {String} comapny.name 名称
         * @apiSuccess {String} comapny.liveaddress 居住地址
         * @apiSuccess {String} comapny.commaddress 通讯地址
         * @apiSuccess {String} comapny.owner 投资人或主管单位名称
         * @apiSuccess {String} comapny.managername 法人姓名
         * @apiSuccess {Number} comapny.manageridtype 法人证件类型\n性质 \n1-军队\n2-政府机关\n3-事业单位\n4-企业\n5-个人\n
         * @apiSuccess {String} comapny.manageridnumber 法人证件号码
         * @apiSuccess {String} comapny.officephoneregion 办公室电话区号
         * @apiSuccess {String} comapny.officephonenumber 办公室电话号码
         * @apiSuccess {String} comapny.mobile 手机号码
         * @apiSuccess {String} comapny.email 电子邮箱
         * @apiSuccess {String} comapny.recordnumber 主体备案号
         *
         * @apiSuccess {Object} website 网站
         * @apiSuccess {Number} website.id 网站ID
         * @apiSuccess {String} website.name 网站名称
         * @apiSuccess {String} website.domain 网站域名
         * @apiSuccess {String} website.domain1 网站域名1
         * @apiSuccess {String} website.domain2 网站域名2
         * @apiSuccess {String} website.domain3 网站域名3
         * @apiSuccess {String} website.domain4 网站域名4
         * @apiSuccess {String} website.homeurl 网站首页URL
         * @apiSuccess {String} website.servicecontent 网站服务内容
         * @apiSuccess {Object} website.languages 网站语言,json结构
                                        {
                                            chinese: true,
                                            chinesetraditional: false,
                                            eglish: false,
                                            japanese: false,
                                            french: false,
                                            spanish: false,
                                            arabic: false,
                                            russian: false,
                                            customize: false,
                                            customizeLang: ''
                                        }
         * @apiSuccess {String} website.ispname ISP名称
         * @apiSuccess {String} website.ip 网站IP地址:1.2.3.4'
         * @apiSuccess {Object} website.accessmethod 网站接入方式,json结构
                                        {
                                            specialline: false,
                                            webhost: false,
                                            virtualhost: true,
                                            other: false
                                        }
         * @apiSuccess {String} website.serverregion 服务器放置地
         *
         * @apiSuccess {String} website.managername 负责人姓名
         * @apiSuccess {Number} website.manageridtype 证件类型:1-身分证 2-护照 3-军官证 4-台胞证
         * @apiSuccess {String} website.manageridnumber 证件号码
         * @apiSuccess {String} website.officephoneregion 办公室电话区号
         * @apiSuccess {String} website.officephonenumber 办公室电话号码
         * @apiSuccess {String} website.mobile 手机号码
         * @apiSuccess {String} website.email 电子邮箱
         * @apiSuccess {String} website.qq qq号码
         *
         * @apiUse EmptyRecord
         */
       static getRecord(app){
            var me = this;
            return function *(){
                var session = this.session;
                var ret = {};

                var storeService = new StoreService(app)
                ret = yield storeService.getRecord();

                this.type = 'json';
                this.body = ret;
            }
        }

        /**
         * @api {get} /admin/record 获取记录详情
         * @apiName getRecordb
         * @apiGroup Ops
         * @apiPermission whitelist
         * @apiVersion 0.0.2
         * @apiDescription 通过白名单管理权限
         *
         * @apiParam {Number} id 记录id.
         *
         * @apiSampleRequest http://icp.hzspeed.cn/admin/record/?id
         *
         * @apiSuccess {Object} record 记录
         * @apiSuccess {Number} record.id 记录id
         * @apiSuccess {Number} record.type 备案类型:\n0-首次备案\n1-新增网站\n2-新增接入
         * @apiSuccess {String} record.serverregion 主机区域
         * @apiSuccess {Number} record.companyid 公司id
         * @apiSuccess {Number} record.websiteid 网站id
         * @apiSuccess {String} record.sitemanagerurl 主体单位负责人图片URL
         * @apiSuccess {String} record.checklisturl 核验单图片URL
         * @apiSuccess {String} record.protocolurl1 云平台服务协议第一页l图片URL
         * @apiSuccess {String} record.protocolurl2 云平台服务协议第二页图片URL
         * @apiSuccess {String} record.securityurl1 信息安全管理责任书第一页图片URL
         * @apiSuccess {String} record.securityurl2 信息安全管理责任书第二页图片URL
         * @apiSuccess {String} record.code 备案号
         * @apiSuccess {Number} record.status 备案申请状态\n0-草稿\n1-初审中\n2-初审未通过\n3-初审已通过\n4-照片审核中\n5-照片审核未通过\n6-照片审核已通过\n7-通管局审核中\n8-通管局审核未通过\n9-通管局审核已通过\n10-未知状态\n
         * @apiSuccess {String} record.tenantid 租户ID
         * @apiSuccess {String} record.curtainurl 帘布照片URL
         * @apiSuccess {Number} record.updatetime 记录更新时间
         * @apiSuccess {Number} record.createtime 记录创建时间
         *
         * @apiSuccess {Object} comapny 记录
         * @apiSuccess {Number} comapny.id 公司ID
         * @apiSuccess {String} comapny.province 省
         * @apiSuccess {String} comapny.city 市
         * @apiSuccess {String} comapny.area 区
         * @apiSuccess {Number} comapny.nature 性质 \n1-军队\n2-政府机关\n3-事业单位\n4-企业\n5-个人\n
         * @apiSuccess {Number} comapny.idtype 证件类型\n1-工商执照\n2-组织机构代码
         * @apiSuccess {String} comapny.idnumber 证件号码
         * @apiSuccess {String} comapny.name 名称
         * @apiSuccess {String} comapny.liveaddress 居住地址
         * @apiSuccess {String} comapny.commaddress 通讯地址
         * @apiSuccess {String} comapny.owner 投资人或主管单位名称
         * @apiSuccess {String} comapny.managername 法人姓名
         * @apiSuccess {Number} comapny.manageridtype 法人证件类型\n性质 \n1-军队\n2-政府机关\n3-事业单位\n4-企业\n5-个人\n
         * @apiSuccess {String} comapny.manageridnumber 法人证件号码
         * @apiSuccess {String} comapny.officephoneregion 办公室电话区号
         * @apiSuccess {String} comapny.officephonenumber 办公室电话号码
         * @apiSuccess {String} comapny.mobile 手机号码
         * @apiSuccess {String} comapny.email 电子邮箱
         * @apiSuccess {String} comapny.recordnumber 主体备案号
         *
         * @apiSuccess {Object} website 网站
         * @apiSuccess {Number} website.id 网站ID
         * @apiSuccess {String} website.name 网站名称
         * @apiSuccess {String} website.domain 网站域名
         * @apiSuccess {String} website.domain1 网站域名1
         * @apiSuccess {String} website.domain2 网站域名2
         * @apiSuccess {String} website.domain3 网站域名3
         * @apiSuccess {String} website.domain4 网站域名4
         * @apiSuccess {String} website.homeurl 网站首页URL
         * @apiSuccess {String} website.servicecontent 网站服务内容
         * @apiSuccess {Object} website.languages 网站语言,json结构
         {
             chinese: true,
             chinesetraditional: false,
             eglish: false,
             japanese: false,
             french: false,
             spanish: false,
             arabic: false,
             russian: false,
             customize: false,
             customizeLang: ''
         }
         * @apiSuccess {String} website.ispname ISP名称
         * @apiSuccess {String} website.ip 网站IP地址:1.2.3.4'
         * @apiSuccess {Object} website.accessmethod 网站接入方式,json结构
         {
             specialline: false,
             webhost: false,
             virtualhost: true,
             other: false
         }
         * @apiSuccess {String} website.serverregion 服务器放置地
         *
         * @apiSuccess {String} website.managername 负责人姓名
         * @apiSuccess {Number} website.manageridtype 证件类型:1-身分证 2-护照 3-军官证 4-台胞证
         * @apiSuccess {String} website.manageridnumber 证件号码
         * @apiSuccess {String} website.officephoneregion 办公室电话区号
         * @apiSuccess {String} website.officephonenumber 办公室电话号码
         * @apiSuccess {String} website.mobile 手机号码
         * @apiSuccess {String} website.email 电子邮箱
         * @apiSuccess {String} website.qq qq号码
         *
         * @apiUse EmptyRecord
         */
        static getRecordb(app){
            var me = this;
            return function *(){
                var ret = {};

                var pass = Controllers.passWhitelist(this.remoteAddress,app);
                if( pass ) {
                    var storeService = new StoreService(app)
                    ret = yield storeService.getRecordb();
                }

                this.type = 'json';
                this.body = ret;
            }
        }

        /**
         * @api {put} /record 审核
         * @apiName putRecord
         * @apiGroup Record
         * @apiPermission admin or self
         * @apiVersion 0.0.2
         * @apiDescription 管理员(登录后用户对象里用idadmin字段表示)审核记录
         *
         * @apiSampleRequest http://icp.hzspeed.cn/record/
         *
         * @apiParam {Number} id 记录ID
         * @apiParam {Number} status 备案申请状态\n0-草稿\n1-初审中\n2-初审未通过\n3-初审已通过\n4-照片审核中\n5-照片审核未通过\n6-照片审核已通过\n7-通管局审核中\n8-通管局审核未通过\n9-通管局审核已通过\n10-未知状态\n
         * @apiParam {String} reasons 通过则为备注,拒绝则为理由(多条用p标签分隔)
         * @apiParam {String} [curtainurl] 帘布照片URL
         *
         * @apiSuccess {Number} ret true:成功,false:失败
         */
        static putRecord(app){
            var me = this;
            return function *(){
                var session = this.session;
                var ret = {};

                var storeService = new StoreService(app)
                ret = yield storeService.putRecord();

                this.type = 'json';
                this.body = {ret: ret};
            }
        }

        /**
         * @api {put} /user
         * @apiName putUser
         * @apiGroup User
         * @apiPermission admin or self
         * @apiVersion 0.0.2
         * @apiDescription 修改用户幕布申请地址
         *
         * @apiSampleRequest http://icp.hzspeed.cn/user/
         *
         * @apiParam {String} mailingaddress 幕布邮寄地址
         * @apiParam {String} recipient 收件人
         * @apiParam {String} recipientmobile 收件人手机号
         * @apiParam {String} [companyname] 公司名称
         *
         * @apiSuccess {Number} ret true:成功,false:失败
         */
        static putUser(app){
            var me = this;
            return function *(){
                var session = this.session;
                var ret = {};

                var storeService = new StoreService(app)
                ret = yield storeService.putUser();

                this.type = 'json';
                this.body = {ret: ret};
            }
        }

        /**
         * @api {put} /admin/record 审核
         * @apiName putRecordb
         * @apiGroup Ops
         * @apiPermission whitelist
         * @apiVersion 0.0.2
         * @apiDescription 通过白名单管理权限
         *
         * @apiSampleRequest http://icp.hzspeed.cn/admin/record
         *
         * @apiParam {Number} id 记录ID
         * @apiParam {Number} status 备案申请状态\n0-草稿\n1-初审中\n2-初审未通过\n3-初审已通过\n4-照片审核中\n5-照片审核未通过\n6-照片审核已通过\n7-通管局审核中\n8-通管局审核未通过\n9-通管局审核已通过\n10-未知状态\n
         * @apiParam {String} reasons 通过则为备注,拒绝则为理由(多条用p标签分隔)
         * @apiParam {String} [curtainurl] 帘布照片URL
         *
         * @apiSuccess {Number} ret true:成功,false:失败
         */
        static putRecordb(app){
            var me = this;
            return function *(){
                var ret = {};

                var pass = Controllers.passWhitelist(this.remoteAddress,app);
                if( pass ) {
                    var storeService = new StoreService(app)
                    ret = yield storeService.putRecordb();
                }

                this.type = 'json';
                this.body = {ret: ret};
            }
        }

        /**
         * @api {put} /admin/curtain 寄送幕布
         * @apiName putCurtainb
         * @apiGroup Ops
         * @apiPermission whitelist
         * @apiVersion 0.0.2
         * @apiDescription 通过白名单管理权限
         *
         * @apiSampleRequest http://icp.hzspeed.cn/admin/curtain
         *
         * @apiParam {Number} id 用户ID
         *
         * @apiSuccess {Number} ret true:成功,false:失败
         */
        static putCurtainb(app){
            var me = this;
            return function *(){
                var ret = {};

                var pass = Controllers.passWhitelist(this.remoteAddress,app);
                if( pass ){
                    var storeService = new StoreService(app);
                    ret = yield storeService.putCurtainb();
                }

                this.type = 'json';
                this.body = {ret: ret};
            }
        }

        /**
         * @api {get} /records 获取记录列表
         * @apiName getRecords
         * @apiGroup Record
         * @apiPermission admin or self
         * @apiVersion 0.0.2
         * @apiDescription 管理员(登录后用户对象里用idadmin字段表示)能获取所有用户申请记录,本用户只能获取他自己的申请记录
         *
         * @apiParam {Number} filter 查询状态过滤条件 0-全部(除草稿) 1-待审核  2-已审核通过 3-审核失败的
         * @apiParam {Number} page 页号.
         * @apiParam {Number} rpp  每页记录数.
         *
         * @apiSampleRequest http://icp.hzspeed.cn/records
         *
         * @apiSuccess {Object[]} data 记录列表
         * @apiSuccess {Number} data.id 记录id
         * @apiSuccess {String} data.checklisturl 核验单图片URL
         * @apiSuccess {String} data.protocolurl1 云平台协议第一页图片
         * @apiSuccess {String} data.protocolurl2 云平台协议第二页图片
         * @apiSuccess {String} data.securityurl1 信息安全管理责任书第一页图片URL
         * @apiSuccess {String} data.securityurl2 信息安全管理责任书第二页图片URL
         * @apiSuccess {Number} data.companyid 公司id
         * @apiSuccess {Number} data.websiteid 网站id
         * @apiSuccess {String} data.tenantid 租户id
         * @apiSuccess {Number} data.type  备案类型: 0-首次备案, 1-新增网站, 2-新增接入
         * @apiSuccess {Number} data.status 备案状态: 0-草稿,1-初审中,2-初审未通过,3-初审已通过,4-照片审核中,5-照片审核未通过,6-照片审核已通过,7-通管局审核中,8-通管局审核未通过,9-通管局审核已通过,10-未知状态
         * @apiSuccess {String} data.code 备案编号
         * @apiSuccess {Number} data.updatetime 记录更新时间
         * @apiSuccess {Number} data.createtime 记录创建时间
         * @apiSuccess {Number} page 页号
         * @apiSuccess {Number} pages 总页数
         * @apiSuccess {Number} rows 总记录数
         * @apiSuccess {Number} rpp 每页显示数
         *
         * @apiUse  EmptyRecord
        */
        static getRecords(app){
            var me = this;
            return function *(){
                var session = this.session;
                var ret = {};

                //测试环境:10.241.20.112   10.160.252.98    10.180.2.58
                //线上环境:10.166.3.39
                var pass = Controllers.passWhitelist(this.remoteAddress,app);
                var storeService = new StoreService(app)
                ret = yield storeService.getRecords();

                this.type = 'json';
                this.body = ret;
            }
        }

        /**
         * @api {get} /admin/records 获取记录列表
         * @apiName getRecordsb
         * @apiGroup Ops
         * @apiPermission whitelist
         * @apiVersion 0.0.2
         * @apiDescription 权限通过白名单管理
         *
         * @apiParam {Number} filter 查询状态过滤条件 0-全部(除草稿) 1-待审核  2-已审核通过 3-审核失败的
         * @apiParam {Number} page 页号.
         * @apiParam {Number} rpp  每页记录数.
         *
         * @apiSampleRequest http://icp.hzspeed.cn/admin/records
         *
         * @apiSuccess {Object[]} data 记录列表
         * @apiSuccess {Number} data.id 记录id
         * @apiSuccess {String} data.checklisturl 核验单图片URL
         * @apiSuccess {String} data.protocolurl1 云平台协议第一页图片
         * @apiSuccess {String} data.protocolurl2 云平台协议第二页图片
         * @apiSuccess {String} data.securityurl1 信息安全管理责任书第一页图片URL
         * @apiSuccess {String} data.securityurl2 信息安全管理责任书第二页图片URL
         * @apiSuccess {Number} data.companyid 公司id
         * @apiSuccess {Number} data.websiteid 网站id
         * @apiSuccess {String} data.tenantid 租户id
         * @apiSuccess {Number} data.type  备案类型: 0-首次备案, 1-新增网站, 2-新增接入
         * @apiSuccess {Number} data.status 备案状态: 0-草稿,1-初审中,2-初审未通过,3-初审已通过,4-照片审核中,5-照片审核未通过,6-照片审核已通过,7-通管局审核中,8-通管局审核未通过,9-通管局审核已通过,10-未知状态
         * @apiSuccess {String} data.code 备案编号
         * @apiSuccess {Number} data.updatetime 记录更新时间
         * @apiSuccess {Number} data.createtime 记录创建时间
         * @apiSuccess {Number} page 页号
         * @apiSuccess {Number} pages 总页数
         * @apiSuccess {Number} rows 总记录数
         * @apiSuccess {Number} rpp 每页显示数
         *
         * @apiUse  EmptyRecord
         */
        static getRecordsb(app){
            var me = this;
            return function *(){
                var ret = {};

                var pass = Controllers.passWhitelist(this.remoteAddress,app);
                if( pass ) {
                    var storeService = new StoreService(app)
                    ret = yield storeService.getRecordsb();
                }

                this.type = 'json';
                this.body = ret;
            }
        }

        /**
         * @api {get} /admin/curtains 获取幕布寄送任务
         * @apiName getCurtainsb
         * @apiGroup Ops
         * @apiPermission whitelist
         * @apiVersion 0.0.2
         * @apiDescription 权限通过白名单管理
         *
         * @apiParam {Number} filter 查询状态过滤条件 1-正在申请幕布状态 2-已寄送幕布  3-正在申请+已寄送幕布用户
         * @apiParam {Number} page 页号.
         * @apiParam {Number} rpp  每页记录数.
         *
         * @apiSampleRequest http://icp.hzspeed.cn/admin/curtains
         *
         * @apiSuccess {Object[]} data 记录列表
         * @apiSuccess {Number} data.id 用户ID
         * @apiSuccess {Number} data.tenantid 租户ID
         * @apiSuccess {String} data.email 租户Email
         * @apiSuccess {String} data.username 租户名称
         * @apiSuccess {String} data.mailingaddress 幕布邮寄地址
         * @apiSuccess {String} data.recipient  幕布接收人
         * @apiSuccess {String} data.recipientmobile 幕布接收人电话
         * @apiSuccess {String} [data.companyname] 幕布接收人公司
         * @apiSuccess {Number} page 页号
         * @apiSuccess {Number} pages 总页数
         * @apiSuccess {Number} rows 总记录数
         * @apiSuccess {Number} rpp 每页显示数
         *
         * @apiUse  EmptyRecord
         */
        static getCurtainsb(app){
            var me = this;
            return function *(){
                var ret = {};

                var pass = Controllers.passWhitelist(this.remoteAddress,app);
                if( pass ) {
                    var storeService = new StoreService(app)
                    ret = yield storeService.getCurtainsb();
                }

                this.type = 'json';
                this.body = ret;
            }
        }

        static deleteRecord(app){
            var me = this;
            return function *(page){
                var session = this.session;
                var ret = {};

                var storeService = new StoreService(app)
                ret = yield storeService.deleteRecord();

                this.type = 'json';
                this.body = {ret: ret};
            }
        }




        static upload(app){
            var supportFileTypes = '^.*\.(?:jpg|png|gif)$';
            var regEx = new RegExp(supportFileTypes);

            return function *(){
                console.dir(this.cookies.get('koa.sid'));
                var session = this.session;
                //if( session.hasOwnProperty('firms') ){
                //    delete session.firms;
                //}
                this.state.upload=0;
                if (this.method.toLocaleLowerCase() == 'post') {
                    var hasError = false;
                    var filename = '';
                    var url = '';
                    var parts = yield* multipart(this);
                    for(let file  of parts.files) {
                        if(!file.filename.match(regEx)) {
                            parts.dispose();
                            this.status = 403;
                            this.body = `403 Forbidden : Unsupported type of upload file [${file.filename}]`;
                            hasError = true;                //ignore downstream middleware
                        }
                        else{
                            var storeService = new StoreService(app);
                            url = yield storeService.uploadNos(Date.now(),file.path);
                            filename = file.filename;
                        }
                    };
                    parts.dispose();


                    this.type = 'json';
                    this.body = {url:url};
                }
                else {
                    EasyNode.DEBUG  && logger.debug('multipart must post');
                }
            }
        }

        /*
        * 没有文件类型限制*/
        static upload2(app){

            return function *(){
                console.dir(this.cookies.get('koa.sid'));
                var session = this.session;
                //if( session.hasOwnProperty('firms') ){
                //    delete session.firms;
                //}
                this.state.upload=0;
                if (this.method.toLocaleLowerCase() == 'post') {
                    var hasError = false;
                    var filename = '';
                    var url = '';
                    var parts = yield* multipart(this);
                    for(let file  of parts.files) {
                          var storeService = new StoreService(app);
                            url = yield storeService.uploadNos(Date.now(),file.path);
                            filename = file.filename;
                    };
                    parts.dispose();


                    this.type = 'json';
                    this.body = {url:url};
                }
                else {
                    EasyNode.DEBUG  && logger.debug('multipart must post');
                }
            }
        }


        static loginCallback(app){
            return function *(){
                var loginService = new LoginService(app);
                var result = yield loginService.login(this.query);

                if( result.hasOwnProperty('user') ) {
                    this.session.user = result.user;
                }else{
                    this.session.user = result;
                }
                this.redirect('/');
            }
        }

        static passWhitelist( ip,app ){
            var pass = false;
            const ips = app.config.whiteips;
            ips.forEach(function(v,index){
                if( ip.includes(v) ){
                    pass = true;
                }
            })
            console.log("pass:",pass);
            console.log("remoteAddress:",ip);
            return pass;
        }

        getClassName()
        {
            return EasyNode.namespace(__filename);
        }
    }

    module.exports = Controllers;
})();