예제 #1
0
    def post(self):
        legal, rqmsg, msg = yield self.check_arguments(msgws.UpdateSmsAlarm(),
                                                       msgws.CommAns(),
                                                       use_scode=1)

        if legal:
            # 删除原始记录
            # for a in rqmsg.record_id:
            #     strsql = '''delete from {0}_data.record_msg_new where record_id={1}'''.format(
            #         self._db_name, a)
            strsql = '''delete from {0}.record_msg_new where record_id in ({1})'''.format(
                self._db_name_data,
                ','.join([str(a) for a in rqmsg.record_id]))
            cur = yield self.mydata_collector(strsql, need_fetch=0)
            if cur is None:
                msg.head.if_st = 45
            # 写入发送记录
            strsql = '''INSERT INTO {0}.record_msg_log(`send_date`, `send_number`,`send_msg`) VALUES ({1},{2},"{3}")'''.format(
                self._db_name_data, mx.switchStamp(time.time()),
                rqmsg.user_tel, rqmsg.fault_msg)
            cur = yield self.mydata_collector(strsql, need_fetch=0)
            if cur is None:
                msg.head.if_st = 45

        self.write(mx.code_pb2(msg, self._go_back_format))
        self.finish()
        del msg, rqmsg
예제 #2
0
    def post(self):
        legal, rqmsg, msg = yield self.check_arguments(msgws.rqUserInfo(),
                                                       msgws.UserInfo(),
                                                       use_scode=1)
        if legal:
            strsql = '''select user_name,user_phonenumber from {0}.user_list'''.format(
                self._db_name)
            if len(rqmsg.user_name) > 0:
                strsql += " where user_name=`{0}`".format(rqmsg.user_name)
            record_total, buffer_tag, paging_idx, paging_total, cur = yield self.mydata_collector(
                strsql,
                need_fetch=1,
                need_paging=0,
                buffer_tag=msg.head.paging_buffer_tag,
                paging_idx=msg.head.paging_idx,
                paging_num=msg.head.paging_num)
            if record_total is None:
                msg.head.if_st = 45
            else:
                msg.head.paging_record_total = record_total
                msg.head.paging_buffer_tag = buffer_tag
                msg.head.paging_idx = paging_idx
                msg.head.paging_total = paging_total
                for d in cur:
                    userview = msgws.UserInfo.UserView()
                    if d[1] is not None and len(d[1]) > 0:
                        userview.user = d[0]
                        userview.tel = str(d[1]).strip()
                    msg.user_view.extend([userview])
                    del userview

            del cur, strsql
        self.write(mx.code_pb2(msg, self._go_back_format))
        self.finish()
        del msg, rqmsg
예제 #3
0
파일: user.py 프로젝트: xyzj/lump
    def post(self):
        contents = ''
        env = False

        user_data, rqmsg, msg, user_uuid = yield self.check_arguments(
            None, None)
        user_uuid = self.get_argument('uuid')
        if user_uuid in libiisi.cache_buildin_users:
            msg.head.if_st = 0
            msg.head.if_msg = 'build-in user are not allowed to logout.'
        else:
            if user_data is not None:
                contents = 'logout from {0}'.format(self.request.remote_ip)
                del libiisi.cache_user[user_uuid]
                try:
                    del libiisi.cache_tml_r[user_uuid]
                    del libiisi.cache_tml_w[user_uuid]
                    del libiisi.cache_tml_x[user_uuid]
                except:
                    pass
                env = True
            else:
                msg.head.if_st = 40
                msg.head.if_msg = 'The user is not logged'

        self.write(mx.code_pb2(msg, self._go_back_format))
        self.finish()
        if env:
            self.write_event(122,
                             contents,
                             2,
                             user_name=user_data['user_name'],
                             app_unique=rqmsg.head.unique)
        del msg, rqmsg, user_data
예제 #4
0
    def post(self):
        args = self.request.arguments
        if 'givemejson' in args.keys():
            self._go_back_format = True

        pb2 = self.get_argument('pb2')
        rqmsg = msgws.rqUserDel()
        msg = msgws.CommAns()
        msg.head.ver = 160328
        msg.head.if_dt = int(time.time())
        try:
            rqmsg.ParseFromString(base64.b64decode(pb2))
            msg.head.idx = rqmsg.head.idx
            msg.head.if_st = 1
        except:
            msg.head.if_st = 46

        # 删除用户
        try:
            contents = ''
            #判断是否admin账户,是则返回异常,不是则可以删除
            if rqmsg.user != 'admin':
                # 检查用户名密码是否合法并且删除该用户
                strsql = 'delete from {0}.user_list where user_name="{1}" and user_password="******"'.format(
                    self._db_name, rqmsg.user.replace('"', ''),
                    rqmsg.pwd.replace('"', ''))
                cur = yield self.mydata_collector(strsql,
                                                  need_fetch=0,
                                                  need_paging=0)
                affected_rows = cur[0][0]
                if affected_rows > 0:
                    contents = 'delete user {0} from {1} success'.format(
                        rqmsg.user, self.request.remote_ip)
                    msg.head.if_st = 1
                    msg.head.if_msg = 'successfully delete'
                else:
                    contents = 'delete user {0} from {1} failed'.format(
                        rqmsg.user, self.request.remote_ip)
                    msg.head.if_st = 0
                    msg.head.if_msg = 'no such user or password wrong'
            else:
                contents = 'admin account can not delete'
                msg.head.if_st = 0
                msg.head.if_msg = "admin account can not delete"
            del cur, strsql
        except Exception as ex:
            msg.head.if_st = 0
            msg.head.if_msg = str(ex.message)

        self.write(mx.code_pb2(msg, self._go_back_format))
        self.finish()
        yield self.write_event(156,
                               contents,
                               2,
                               user_name=rqmsg.user,
                               app_unique=rqmsg.head.unique)
        del msg, rqmsg
예제 #5
0
파일: user.py 프로젝트: xyzj/lump
    def post(self):
        user_data, rqmsg, msg, user_uuid = yield self.check_arguments(
            msgws.rqUserInfo(), msgws.UserInfo())

        env = False
        contents = ''

        if user_uuid in libiisi.cache_buildin_users and user_data[
                'user_auth'] < 15:
            msg.head.if_st = 0
            msg.head.if_msg = 'build-in user are not allowed to view user info.'
        else:
            if user_data is not None:
                try:
                    strsql = ''
                    if user_data['user_auth'] < 4:
                        msg.head.if_st = 11
                    else:
                        if user_data['user_auth'] in libiisi.can_admin:
                            if len(rqmsg.user_name) == 0:
                                strsql = 'select user_name, user_real_name, user_password, user_phonenumber, user_operator_code from {0}.user_list'.format(
                                    user_data['user_db'])
                            else:
                                strsql = 'select user_name, user_real_name, user_password, user_phonenumber, user_operator_code from {0}.user_list where user_name="{1}"'.format(
                                    self._db_name, rqmsg.user_name)
                        elif user_data['user_auth'] in libiisi.can_read:
                            strsql = 'select user_name, user_real_name, user_password, user_phonenumber, user_operator_code from {0}.user_list where user_name="{1}"'.format(
                                self._db_name, user_data['user_name'])
                    record_total, buffer_tag, paging_idx, paging_total, cur = yield self.mydata_collector(
                        strsql, need_fetch=1, need_paging=0)
                    if record_total is None:
                        msg.head.if_st = 45
                    else:
                        msg.head.paging_record_total = record_total
                        msg.head.paging_buffer_tag = buffer_tag
                        msg.head.paging_idx = paging_idx
                        msg.head.paging_total = paging_total
                        for d in cur:
                            userview = msgws.UserInfo.UserView()
                            userview.user = d[0]
                            userview.fullname = d[1] if d[1] is not None else ''
                            # userview.pwd = d[2]
                            # userview.auth = d[3]
                            userview.mobile = d[3] if d[3] is not None else ''
                            userview.code = d[4] if d[4] is not None else ''
                            # userview.area_id = d[5]
                            msg.user_view.extend([userview])
                            del userview

                    del cur
                except Exception as ex:
                    msg.head.if_st = 0
                    msg.head.if_msg = str(ex)

        self.write(mx.code_pb2(msg, self._go_back_format))
        self.finish()
        del msg, rqmsg, user_data, user_uuid
예제 #6
0
    def post(self):
        args = self.request.arguments
        if 'givemejson' in args.keys():
            self._go_back_format = True

        pb2 = self.get_argument('pb2')
        rqmsg = msgws.rqUserInfo()
        msg = msgws.UserInfo()
        msg.head.ver = 160328
        msg.head.if_dt = int(time.time())
        try:
            rqmsg.ParseFromString(base64.b64decode(pb2))
            msg.head.idx = rqmsg.head.idx
            msg.head.if_st = 1
        except:
            msg.head.if_st = 46

        try:
            strsql = ''
            if len(rqmsg.user_name) == 0:
                strsql = 'select user_name,user_real_name,user_password,user_phonenumber,user_remark,user_id from {0}.user_list'.format(
                    self._db_name)
            else:
                strsql = 'select user_name,user_real_name,user_password,user_phonenumber,user_remark,user_id from {0}.user_list where user_name="{1}"'.format(
                    self._db_name, rqmsg.user_name)

            record_total, buffer_tag, paging_idx, paging_total, cur = yield self.mydata_collector(
                strsql, need_fetch=1, need_paging=0)
            if record_total is None:
                msg.head.if_st = 45
            else:
                msg.head.paging_record_total = record_total
                msg.head.paging_buffer_tag = buffer_tag
                msg.head.paging_idx = paging_idx
                msg.head.paging_total = paging_total
                for d in cur:
                    userview = msgws.UserInfo.UserView()
                    userview.user = d[0]
                    userview.fullname = d[1] if d[1] is not None else ''
                    # userview.pwd = d[2]
                    userview.tel = d[3] if d[3] is not None else ''
                    userview.mobile = int(d[3]) if d[3] is not None else 0
                    userview.remark = d[4] if d[4] is not None else ''
                    userview.user_id = d[5]
                    msg.user_view.extend([userview])
                    del userview
            del cur
        except Exception as ex:
            msg.head.if_st = 0
            msg.head.if_msg = str(ex)

        self.write(mx.code_pb2(msg, self._go_back_format))
        self.finish()
        del msg, rqmsg
예제 #7
0
    def post(self):
        args = self.request.arguments
        if 'givemejson' in args.keys():
            self._go_back_format = True

        pb2 = self.get_argument('pb2')
        rqmsg = msgws.rqUserAdd()
        msg = msgws.UserAdd()
        msg.head.ver = 160328
        msg.head.if_dt = int(time.time())
        try:
            rqmsg.ParseFromString(base64.b64decode(pb2))
            msg.head.idx = rqmsg.head.idx
            msg.head.if_st = 1
        except:
            msg.head.if_st = 46

        try:
            # 检查用户名密码是否存在
            strsql = 'insert into {0}.user_info (user_name,user_password,user_real_name,date_create,date_update,date_access,user_remark) \
                        values ("{1}","{2}","{3}","{4}","{5}","{6}","{7}")'.format(
                self._db_name, rqmsg.user, rqmsg.pwd, rqmsg.fullname,
                mx.switchStamp(time.time()), mx.switchStamp(time.time()),
                mx.switchStamp(time.time()),
                'add user from {0}'.format(self.request.remote_ip))
            cur = yield self.mydata_collector(strsql, need_fetch=0)
            affected_rows = cur[0][0]
            msg.user_id = cur[0][1]
            contents = ''
            if affected_rows > 0:
                contents = 'add user {0} from {1} success'.format(
                    rqmsg.user, self.request.remote_ip)
                yield self.write_event(
                    154, 'add user {0} from {1} success'.format(
                        rqmsg.user,
                        self.request.remote_ip,
                        app_unique=rqmsg.head.unique))
            else:
                contents = 'add user {0} from {1} failed'.format(
                    rqmsg.user, self.request.remote_ip)
                msg.head.if_st = 0
                msg.head.if_msg = 'User already exists'
        except Exception as ex:
            msg.head.if_st = 0
            msg.head.if_msg = str(ex.message)

        self.write(mx.code_pb2(msg, self._go_back_format))
        self.finish()
        yield self.write_event(154,
                               contents,
                               2,
                               user_name=rqmsg.user,
                               app_unique=rqmsg.head.unique)
        del msg, rqmsg
예제 #8
0
    def post(self):
        args = self.request.arguments
        if 'givemejson' in args.keys():
            self._go_back_format = True

        pb2 = self.get_argument('pb2')
        rqmsg = msgws.rqUserEdit()
        msg = msgws.CommAns()
        msg.head.ver = 160328
        msg.head.if_dt = int(time.time())
        try:
            rqmsg.ParseFromString(base64.b64decode(pb2))
            msg.head.idx = rqmsg.head.idx
            msg.head.if_st = 1
        except:
            msg.head.if_st = 46

        try:
            # 检查用户名密码是否存在并更新
            strsql = 'update {0}.user_list set \
            user_password="******",user_real_name="{4}",user_phonenumber="{5}",user_remark="{6}" \
            where user_name="{1}" and user_password="******"'.format(
                self._db_name, rqmsg.user.replace('"', ''),
                rqmsg.pwd_old.replace('"', ''), rqmsg.pwd.replace('"', ''),
                rqmsg.fullname, rqmsg.mobile, rqmsg.remark)
            cur = yield self.mydata_collector(strsql,
                                              need_fetch=0,
                                              need_paging=0)
            affected_rows = cur[0][0]
            contents = ''
            if affected_rows > 0:
                contents = 'edit user {0} from {1} success'.format(
                    rqmsg.user, self.request.remote_ip)
                msg.head.if_st = 1
                msg.head.if_msg = 'successfully to edit user {0}'.format(
                    rqmsg.user)
            else:
                contents = 'edit user {0} from {1} failed, wrong username or password or nothing change'.format(
                    rqmsg.user, self.request.remote_ip)
                msg.head.if_st = 0
                msg.head.if_msg = 'Wrong username or password or nothing change'
        except Exception as ex:
            msg.head.if_st = 0
            msg.head.if_msg = str(ex.message)

        self.write(mx.code_pb2(msg, self._go_back_format))
        self.finish()
        yield self.write_event(155,
                               contents,
                               2,
                               user_name=rqmsg.user,
                               app_unique=rqmsg.head.unique)
        del msg, rqmsg
예제 #9
0
    def post(self):
        user_data, rqmsg, msg, user_uuid = yield self.check_arguments(
            msgws.rqEluCtl(), None)

        if user_data is not None:
            if user_data['user_auth'] in libiisi.can_read & libiisi.can_exec:
                # 验证用户可操作的设备id
                yield self.update_cache('r', user_uuid)
                if 0 in user_data['area_r'] or user_data['is_buildin'] == 1:
                    rtu_ids = list(rqmsg.tml_id)
                else:
                    rtu_ids = self.check_tml_r(user_uuid, list(rqmsg.tml_id))

                if len(rtu_ids) == 0:
                    msg.head.if_st = 11
                else:
                    yield self.update_cache()
                    for tml_id in rtu_ids:
                        phy_id, fid, tml_name = self.get_phy_info(tml_id)
                        if phy_id == -1:
                            continue
                        if fid > 0:
                            addr = self.get_phy_list([fid])
                            cid = phy_id
                            tra = 2
                        else:
                            addr = [phy_id]
                            cid = 1
                            tra = 1
                        tcsmsg = libiisi.initRtuProtobuf(cmd='wlst.elu.6257',
                                                         addr=list(addr),
                                                         cid=cid,
                                                         tra=tra)
                        lp_do = []
                        i = 0
                        for loop in range(len(rqmsg.loop_id)):
                            if i == 8:
                                break
                            lp_do.append(loop if loop <= 2 else 2)
                        if len(lp_do) < 8:
                            lp_do.extend([2] * (8 - len(lp_do)))
                        tcsmsg.wlst_tml.wlst_elu_6257.opt_do.extend(lp_do)
                        libiisi.send_to_zmq_pub(
                            'tcs.req.{1}.{0}'.format(tcsmsg.head.cmd,
                                                     libiisi.cfg_tcs_port),
                            tcsmsg.SerializeToString())
            else:
                msg.head.if_st = 11

        self.write(mx.code_pb2(msg, self._go_back_format))
        self.finish()
        del msg, rqmsg, user_data, user_uuid
예제 #10
0
    def post(self):
        args = self.request.arguments
        if 'givemejson' in args.keys():
            self._go_back_format = True

        pb2 = self.get_argument('pb2')
        rqmsg = msgws.rqUserLogin()
        msg = msgws.UserLogin()
        msg.head.ver = 160328
        msg.head.if_dt = int(time.time())
        try:
            rqmsg.ParseFromString(base64.b64decode(pb2))
            msg.head.idx = rqmsg.head.idx
            msg.head.if_st = 1
        except:
            msg.head.if_st = 46

        # 检查用户名密码是否合法
        strsql = 'select user_id,user_name,user_real_name,user_phonenumber,user_remark from {0}.user_list \
        where user_name="{1}" and user_password="******"'.format(
            self._db_name, rqmsg.user.replace('"', ''),
            rqmsg.pwd.replace('"', ''))
        record_total, buffer_tag, paging_idx, paging_total, cur = yield self.mydata_collector(
            strsql, need_fetch=1, need_paging=0)

        if record_total is None or record_total == 0:
            msg.head.if_st = 0
            msg.head.if_msg = 'Wrong username or password'
            yield self.write_event(121,
                                   'login from {0} failed'.format(
                                       self.request.remote_ip),
                                   2,
                                   user_name=rqmsg.user,
                                   app_unique=rqmsg.head.unique)
        else:
            for d in cur:
                msg.user_id = d[0]
                msg.user = d[1]
                msg.fullname = d[2] if d[2] is not None else ''
                msg.mobile = int(d[3]) if d[3] is not None else 0
                msg.remark = d[4] if d[4] is not None else ''
                break
            yield self.write_event(121,
                                   'login from {0} success'.format(
                                       self.request.remote_ip),
                                   2,
                                   user_name=rqmsg.user,
                                   app_unique=rqmsg.head.unique)

        self.write(mx.code_pb2(msg, self._go_back_format))
        self.finish()
예제 #11
0
    def post(self):
        user_data, rqmsg, msg, user_uuid = yield self.check_arguments(
            msgws.rqEluDataGet(), None)

        if user_data is not None:
            if user_data['user_auth'] in libiisi.can_read:
                # 验证用户可操作的设备id
                yield self.update_cache('r', user_uuid)
                if 0 in user_data['area_r'] or user_data['is_buildin'] == 1:
                    rtu_ids = list(rqmsg.tml_id)
                else:
                    rtu_ids = self.check_tml_r(user_uuid, list(rqmsg.tml_id))

                if len(rtu_ids) == 0:
                    msg.head.if_st = 11
                else:
                    yield self.update_cache()
                    for tml_id in rtu_ids:
                        phy_id, fid, tml_name = self.get_phy_info(tml_id)
                        if phy_id == -1:
                            continue
                        if fid > 0:
                            addr = self.get_phy_list([fid])
                            cid = phy_id
                            tra = 2
                        else:
                            addr = [phy_id]
                            cid = 1
                            tra = 1
                        tcsmsg = libiisi.initRtuProtobuf(cmd='wlst.elu.6259',
                                                         addr=list(addr),
                                                         cid=cid,
                                                         tra=tra)
                        libiisi.send_to_zmq_pub(
                            'tcs.req.{1}.{0}'.format(tcsmsg.head.cmd,
                                                     libiisi.cfg_tcs_port),
                            tcsmsg.SerializeToString())
                        tcsmsg = libiisi.initRtuProtobuf(cmd='wlst.elu.6260',
                                                         addr=list(addr),
                                                         cid=cid,
                                                         tra=tra)
                        libiisi.send_to_zmq_pub(
                            'tcs.req.{1}.{0}'.format(tcsmsg.head.cmd,
                                                     libiisi.cfg_tcs_port),
                            tcsmsg.SerializeToString())
            else:
                msg.head.if_st = 11

        self.write(mx.code_pb2(msg, self._go_back_format))
        self.finish()
        del msg, rqmsg, user_data, user_uuid
예제 #12
0
    def post(self):
        legal, rqmsg, msg = yield self.check_arguments(msgws.rqQuerySmsAlarm(),
                                                       msgws.QuerySmsAlarm(),
                                                       use_scode=1)
        if legal:
            if rqmsg.data_mark == 2:  # 市政短信
                strsql = '''select is_alarm,record_id,rtu_name,user_phone_number
                            from {0}.record_msg_new where is_alarm=2
                            order by user_phone_number limit 100'''.format(
                    self._db_name_data)
            else:
                strsql = '''select is_alarm,record_id,rtu_name,user_phone_number,rtu_id,loop_id,loop_name,fault_name,
                         date_create from {0}.record_msg_new
                         where is_alarm in (0,1)
                         order by user_phone_number,rtu_id,loop_id,is_alarm,date_create desc limit 100'''.format(
                    self._db_name_data)

            record_total, buffer_tag, paging_idx, paging_total, cur = yield self.mydata_collector(
                strsql,
                need_fetch=1,
                need_paging=0,
                buffer_tag=msg.head.paging_buffer_tag,
                paging_idx=msg.head.paging_idx,
                paging_num=msg.head.paging_num)
            if record_total is None:
                msg.head.if_st = 45
            else:
                msg.head.paging_record_total = record_total
                msg.head.paging_buffer_tag = buffer_tag
                msg.head.paging_idx = paging_idx
                msg.head.paging_total = paging_total
                for d in cur:
                    smsr = msgws.QuerySmsAlarm.SmsAlarm()
                    smsr.data_mark = d[0]
                    smsr.record_id = d[1]
                    smsr.tml_name = d[2]
                    smsr.user_tel = d[3]
                    if d[0] in (0, 1):
                        smsr.tml_id = d[4]
                        smsr.loop_id = d[5]
                        smsr.loop_name = d[6]
                        smsr.fault_name = d[7]
                        smsr.dt_create = mx.switchStamp(int(d[8]))
                    msg.sms_alarm.extend([smsr])
                    del smsr

            del cur, strsql

        self.write(mx.code_pb2(msg, self._go_back_format))
        self.finish()
        del msg, rqmsg
예제 #13
0
    def post(self):
        user_data, rqmsg, msg, user_uuid = yield self.check_arguments(
            msgws.rqMruInfoNN(), msgws.MruInfoNN())

        if user_data is not None:
            if user_data['user_auth'] in libiisi.can_read:
                if msg.head.if_st == 1:
                    if rqmsg.company_id == -1:
                        str_companyid = '1=1'
                    else:
                        str_companyid = ' a.company_id = {0} '.format(
                            rqmsg.company_id)

                    strsql = ''' select a.rtu_name,a.meter_address,a.mru_baudrate,a.mru_type,a.company_id,a.date_create,a.init_value,
                            a.company_name,a.meter_scale ,a.sim_number from {0}.para_meter as a
                            where {1} {2}'''.format(
                        self._db_name_data, str_companyid, self._fetch_limited)

                    record_total, buffer_tag, paging_idx, paging_total, cur = yield self.mydata_collector(
                        strsql,
                        need_fetch=1,
                        buffer_tag=msg.head.paging_buffer_tag,
                        paging_idx=msg.head.paging_idx,
                        paging_num=msg.head.paging_num)
                    if record_total is None:
                        msg.head.if_st = 45
                    else:
                        msg.head.paging_record_total = record_total
                        msg.head.paging_buffer_tag = buffer_tag
                        msg.head.paging_idx = paging_idx
                        msg.head.paging_total = paging_total
                        for d in cur:
                            mm = msgws.MruInfoNN.MruInfoNN()
                            mm.mru_name = d[0]
                            mm.mru_id = int(d[1])
                            mm.mru_baud_rate = d[2]
                            mm.mru_type = d[3]
                            mm.company_id = d[4]
                            mm.setup_date = mx.switchStamp(int(d[5]))
                            mm.setup_value = float(
                                d[6]) if d[6] is not 0 else 0.0
                            mm.company_name = d[7]
                            mm.transform = d[8] if d[8] is not 0 else 0
                            mm.sim = d[9]
                            msg.mru_infonn.extend([mm])
                    del cur, strsql

        self.write(mx.code_pb2(msg, self._go_back_format))
        self.finish()
        del msg, rqmsg, user_data
예제 #14
0
    def post(self):
        user_data, rqmsg, msg, user_uuid = yield self.check_arguments(
            msgws.rqQuerySmsRecord(), msgws.QuerySmsRecord())

        if user_data is not None:
            if user_data['user_auth'] in libiisi.can_read:
                sdt, edt = self.process_input_date(rqmsg.dt_start,
                                                   rqmsg.dt_end,
                                                   to_chsarp=1)
                yield self.update_cache("r", user_uuid)

                if len(rqmsg.tels) > 0:
                    str_tels = ' and send_number in ({0})'.format(','.join(
                        [str(t) for t in rqmsg.tels]))
                else:
                    str_tels = ''
                strsql = 'select send_date,send_number,send_msg from {0}.record_msg_log \
                                where send_date>={1} and send_date<={2} and send_msg like "%{3}%" \
                                {4} {5}'.format(self._db_name_data, sdt, edt,
                                                rqmsg.msg, str_tels,
                                                self._fetch_limited)

                record_total, buffer_tag, paging_idx, paging_total, cur = yield self.mydata_collector(
                    strsql,
                    need_fetch=1,
                    buffer_tag=msg.head.paging_buffer_tag,
                    paging_idx=msg.head.paging_idx,
                    paging_num=msg.head.paging_num)
                if record_total is None:
                    msg.head.if_st = 45
                else:
                    msg.head.paging_record_total = record_total
                    msg.head.paging_buffer_tag = buffer_tag
                    msg.head.paging_idx = paging_idx
                    msg.head.paging_total = paging_total
                    for d in cur:
                        smsr = msgws.QuerySmsRecord.SmsRecord()
                        smsr.dt_send = mx.switchStamp(int(d[0]))
                        smsr.tel = int(d[1])
                        smsr.msg = d[2]
                        msg.sms_record.extend([smsr])
                        del smsr

                del cur, strsql

        self.write(mx.code_pb2(msg, self._go_back_format))
        self.finish()
        del msg, rqmsg, user_data, user_uuid
예제 #15
0
파일: errinfo.py 프로젝트: xyzj/lump
    def post(self):
        user_data, rqmsg, msg, user_uuid = yield self.check_arguments(
            msgws.rqErrInfo(), msgws.ErrInfo())

        if user_data is not None:
            if user_data['user_auth'] in libiisi.can_read:
                # ,akarn_time_set,alarm_time_start,alarm_time_end
                strsql = 'select fault_id,fault_name,fault_name_define,is_enable,fault_remark, \
                            fault_check_keyword from {0}.fault_types'.format(
                    self._db_name)
                record_total, buffer_tag, paging_idx, paging_total, cur = yield self.mydata_collector(
                    strsql,
                    need_fetch=1,
                    buffer_tag=msg.head.paging_buffer_tag,
                    paging_idx=msg.head.paging_idx,
                    paging_num=msg.head.paging_num)
                if record_total is None:
                    msg.head.if_st = 45
                else:
                    msg.head.paging_record_total = record_total
                    msg.head.paging_buffer_tag = buffer_tag
                    msg.head.paging_idx = paging_idx
                    msg.head.paging_total = paging_total
                    for d in cur:
                        if d[1] is not None:
                            errinfoview = msgws.ErrInfo.ErrInfoView()
                            errinfoview.err_id = int(d[0])
                            errinfoview.err_name = d[
                                1] if d[1] is not None else ''
                            errinfoview.err_name_custome = d[
                                2] if d[2] is not None else ''
                            errinfoview.enable_alarm = int(d[3])
                            errinfoview.err_remark = d[4]
                            # errinfoview.err_level = d[5]
                            errinfoview.err_check_keyword = d[5]
                            # errinfoview.err_time_set = d[7]
                            # errinfoview.dt_err_custome_start = mx.switchStamp(d[8])
                            # errinfoview.dt_err_custome_end = mx.switchStamp(d[9])
                            msg.err_info_view.extend([errinfoview])
                            del errinfoview

                del cur, strsql

        self.write(mx.code_pb2(msg, self._go_back_format))

        self.finish()
        del msg, rqmsg, user_data, user_uuid
예제 #16
0
    def post(self):
        user_data, rqmsg, msg, user_uuid = yield self.check_arguments(
            msgws.rqRtuVerGet(), None)

        env = False
        if user_data is not None:
            try:
                tver = int(self.get_argument('tver'))
            except:
                tver = 1
            if user_data['user_auth'] in libiisi.can_read:
                # 验证用户可操作的设备id
                yield self.update_cache('r', user_uuid)
                if 0 in user_data['area_r'] or user_data['is_buildin'] == 1:
                    rtu_ids = ','.join(
                        [str(a) for a in self.get_phy_list(rqmsg.tml_id)])
                else:
                    rtu_ids = ','.join([
                        str(a) for a in self.get_phy_list(
                            self.check_tml_r(user_uuid, list(rqmsg.tml_id)))
                    ])
                if len(rtu_ids) == 0:
                    msg.head.if_st = 11
                else:
                    if tver == 1:
                        tcsmsg = libiisi.initRtuJson(2, 7, 1, 1, 1,
                                                     'wlst.rtu.5c00',
                                                     self.request.remote_ip, 0,
                                                     rtu_ids, dict())
                        # libiisi.set_to_send(tcsmsg, 0, False)
                        libiisi.send_to_zmq_pub(
                            'tcs.req.{0}.wlst.rtu.5c00'.format(
                                libiisi.cfg_tcs_port),
                            json.dumps(tcsmsg, separators=(',', ':')).lower())
                    elif tver == 2:
                        tcsmsg = libiisi.initRtuProtobuf(cmd='ahhf.rtu.5c00',
                                                         tver=tver)
                        libiisi.send_to_zmq_pub(
                            'tcs.req.{0}.{1}'.format(libiisi.cfg_tcs_port,
                                                     tcsmsg.head.cmd),
                            tcsmsg.SerializeToString())
            else:
                msg.head.if_st = 11

        self.write(mx.code_pb2(msg, self._go_back_format))
        self.finish()
        del msg, rqmsg, user_data
예제 #17
0
파일: user.py 프로젝트: xyzj/lump
    def post(self):
        user_data, rqmsg, msg, user_uuid = yield self.check_arguments(
            msgws.rqUserAdd(), None)

        env = False
        contents = ''

        if user_uuid in libiisi.cache_buildin_users:
            msg.head.if_st = 0
            msg.head.if_msg = 'build-in user are not allowed to add new user.'
        else:
            if user_data is not None:
                if user_data['user_auth'] < 15:
                    msg.head.if_st = 11
                else:
                    # 判断用户是否存在
                    strsql = 'select * from {0}.user_list where user_name="{1}" and user_password="******"'.format(
                        self._db_name, rqmsg.user.replace('"', ''),
                        rqmsg.pwd.replace('"', ''))
                    record_total, buffer_tag, paging_idx, paging_total, cur = yield self.mydata_collector(
                        strsql, need_fetch=1)
                    if record_total > 0:
                        msg.head.if_st = 45
                        msg.head.if_msg = 'User already exists'
                    else:
                        strsql = 'insert into {0}.user_list (user_name, user_real_name, user_password, user_phonenumber, user_operator_code, date_create, date_update, date_access) \
                        values ("{1}","{2}","{3}","{4}","{5}",{6},{7},{8})'.format(
                            self._db_name, rqmsg.user, rqmsg.fullname,
                            rqmsg.pwd, rqmsg.mobile, rqmsg.code,
                            mx.switchStamp(int(time.time())),
                            mx.switchStamp(int(time.time())),
                            mx.switchStamp(int(time.time())))
                        yield self.mydata_collector(strsql, need_fetch=0)
                        env = True
                        contents = 'add user {0}'.format(rqmsg.user)

                    del cur, strsql

        self.write(mx.code_pb2(msg, self._go_back_format))
        self.finish()
        if env:
            self.write_event(154,
                             contents,
                             2,
                             user_name=user_data['user_name'],
                             app_unique=rqmsg.head.unique)
        del msg, rqmsg, user_data
예제 #18
0
파일: user.py 프로젝트: xyzj/lump
    def post(self):
        user_data, rqmsg, msg, user_uuid = yield self.check_arguments(
            msgws.rqUserDel(), None)

        env = False
        contents = ''

        if user_uuid in libiisi.cache_buildin_users:
            msg.head.if_st = 0
            msg.head.if_msg = 'build-in user are not allowed to del user.'
        else:
            if user_data is not None:
                if user_data['user_auth'] < 15:
                    msg.head.if_st = 11
                else:
                    # 删除用户
                    try:
                        strsql = 'select * from {0}.user_list where user_name="{1}"'.format(
                            self._db_name, rqmsg.user.replace('"', ''))
                        record_total, buffer_tag, paging_idx, paging_total, cur = yield self.mydata_collector(
                            strsql, need_fetch=1)
                        if record_total > 0:
                            strsql = 'delete from {0}.user_list where user_name="{1}"'.format(
                                self._db_name, rqmsg.user)
                            yield self.mydata_collector(strsql, need_fetch=0)
                            env = True
                            contents = 'del user {0}'.format(rqmsg.user)
                        else:
                            msg.head.if_st = 46
                            msg.head.if_msg = 'no such user'

                        del cur, strsql
                    except Exception as ex:
                        msg.head.if_st = 0
                        msg.head.if_msg = str(ex.message)

        self.write(mx.code_pb2(msg, self._go_back_format))
        self.finish()
        if env:
            self.write_event(156,
                             contents,
                             2,
                             user_name=user_data['user_name'],
                             app_unique=rqmsg.head.unique)
        del msg, rqmsg, user_data, user_uuid
예제 #19
0
    def post(self):
        legal, rqmsg, msg = yield self.check_arguments(msgws.rqSubmitSms(),
                                                       msgws.CommAns(),
                                                       use_scode=1)
        if legal:
            strsql = ''
            t = mx.switchStamp(int(time.time()))
            for tel in rqmsg.tels:
                if isinstance(tel, types.LongType):
                    strsql += 'insert into {0}.record_msg_new (date_create,rtu_name,user_phone_number,is_alarm) values ({1},"{2}",{3},2);'.format(
                        self._db_name_data, t,
                        u'{0}'.format(str(rqmsg.msg).strip()), tel)
            yield self.mydata_collector(strsql, need_fetch=0)
        # else:
        #     msg.head.if_st = 0
        #     msg.head.if_msg = 'Security code error'

        self.write(mx.code_pb2(msg, self._go_back_format))
        self.finish()
        del msg, rqmsg
예제 #20
0
    def post(self):
        legal, rqmsg, msg = yield self.check_arguments(msgws.CommAns(),
                                                       msgws.CommAns(),
                                                       use_scode=1)

        if legal:
            strsql = '''select count(1) from {0}.record_msg_log'''.format(
                self._db_name_data)
            record_total, buffer_tag, paging_idx, paging_total, cur = yield self.mydata_collector(
                strsql, need_fetch=1)
            if cur is not None:
                if cur[0][0] > 1000:
                    strsql = '''delete from {0}.record_msg_log where send_date<{1}'''.format(
                        self._db_name_data,
                        mx.switchStamp(int(time.time() - 31622400)))
                    cur = yield self.mydata_collector(strsql, need_fetch=0)
                    if cur is None:
                        msg.head.if_st = 45

        self.write(mx.code_pb2(msg, self._go_back_format))
        self.finish()
        del msg, rqmsg
예제 #21
0
파일: errinfo.py 프로젝트: xyzj/lump
    def post(self):
        user_data, rqmsg, msg, user_uuid = yield self.check_arguments(
            msgws.rqQueryErrorCount(), msgws.QueryErrorCount())

        if user_data is not None:
            if user_data['user_auth'] in libiisi.can_read:
                if rqmsg.type == 1:  # 按设备查询
                    strsql = 'select a.rtu_id,b.rtu_name,a.fault_num from {0}.para_base_equipment as b \
                                left join {1}.sum_fault_by_tml as a on a.rtu_id=b.rtu_id order by a.fault_num desc'.format(self._db_name, self._db_name_data)
                elif rqmsg.type == 2:  # 按故障查询
                    strsql = 'select a.fault_id,b.fault_name,a.fault_num from {1}.sum_fault_by_faultid as a \
                                left join {0}.fault_types as b on a.fault_id=b.fault_id order by a.fault_num desc'.format(self._db_name, self._db_name_data)
                record_total, buffer_tag, paging_idx, paging_total, cur = yield self.mydata_collector(
                    strsql,
                    need_fetch=1,
                    need_paging=0)
                if record_total is None:
                    msg.head.if_st = 45
                else:
                    msg.head.paging_record_total = record_total
                    msg.head.paging_buffer_tag = buffer_tag
                    msg.head.paging_idx = paging_idx
                    msg.head.paging_total = paging_total
                    msg.type = rqmsg.type
                    for d in cur:
                        if d[0] is not None:
                            errnum = msgws.QueryErrorCount.Error_count()
                            errnum.id = d[0] if d[0] is not None else 0
                            errnum.name = d[1] if d[1] is not None else ""
                            errnum.count = d[2]
                            msg.error_count.extend([errnum])
                            del errnum

                del cur, strsql

        self.write(mx.code_pb2(msg, self._go_back_format))

        self.finish()
        del msg, rqmsg, user_data, user_uuid
예제 #22
0
    def post(self):
        user_data, rqmsg, msg, user_uuid = yield self.check_arguments(
            msgws.rqRtuTimerCtl(), None)
        env = False
        contents = ''
        if user_data is not None:
            try:
                tver = int(self.get_argument('tver'))
            except:
                tver = 1
            if rqmsg.data_mark == 0:
                user_auth = libiisi.can_read
            else:
                user_auth = libiisi.can_exec & libiisi.can_write
            if user_data['user_auth'] in user_auth:
                env = True
                contents = 'user from {0} set rtu timer'.format(
                    self.request.remote_ip)
                # 验证用户可操作的设备id
                yield self.update_cache('r', user_uuid)
                if 0 in user_data['area_r'] or user_data['is_buildin'] == 1:
                    rtu_ids = ','.join(
                        [str(a) for a in self.get_phy_list(rqmsg.tml_id)])
                else:
                    rtu_ids = ','.join([
                        str(a) for a in self.get_phy_list(
                            self.check_tml_r(user_uuid, list(rqmsg.tml_id)))
                    ])
                if len(rtu_ids) == 0:
                    msg.head.if_st = 11
                else:
                    if tver == 1:
                        if rqmsg.data_mark == 0:
                            cmd = 'wlst.rtu.1200'
                        else:
                            cmd = 'wlst.rtu.1300'
                        tcsmsg = libiisi.initRtuJson(2, 7, 1, 1, 1, cmd,
                                                     self.request.remote_ip, 0,
                                                     rtu_ids, dict())
                        # libiisi.set_to_send(tcsmsg, 0, False)
                        libiisi.send_to_zmq_pub(
                            'tcs.req.{1}.{0}'.format(cmd,
                                                     libiisi.cfg_tcs_port),
                            json.dumps(tcsmsg, separators=(',', ':')).lower())
                    elif tver == 2:
                        if rqmsg.data_mark == 0:
                            cmd = 'ahhf.rtu.1200'
                        else:
                            cmd = 'ahhf.rtu.1300'
                        tcsmsg = libiisi.initRtuProtobuf(cmd=cmd, tver=2)
                        libiisi.send_to_zmq_pub(
                            'tcs.req.{0}.{1}'.format(libiisi.cfg_tcs_port,
                                                     cmd),
                            tcsmsg.SerializeToString())
            else:
                msg.head.if_st = 11

        self.write(mx.code_pb2(msg, self._go_back_format))
        self.finish()
        if env and rqmsg.data_mark == 1:
            self.write_event(11,
                             contents,
                             2,
                             user_name=user_data['user_name'],
                             app_unique=rqmsg.head.unique)
        del msg, rqmsg, user_data
예제 #23
0
    def post(self):
        user_data, rqmsg, msg, user_uuid = yield self.check_arguments(
            msgws.rqMruDataGet(), None)

        if user_data is not None:
            if user_data['user_auth'] in libiisi.can_read:
                # 验证用户可操作的设备id
                if 0 in user_data['area_r'] or user_data['is_buildin'] == 1:
                    if len(rqmsg.tml_id) > 0:
                        tml_ids = list(rqmsg.tml_id)
                    else:
                        tml_ids = []
                else:
                    if len(rqmsg.tml_id) > 0:
                        tml_ids = self.check_tml_r(user_uuid, list(
                            rqmsg.tml_id))
                    else:
                        tml_ids = libiisi.cache_tml_r[user_uuid]
                    if len(tml_ids) == 0:
                        msg.head.if_st = 11

                if msg.head.if_st == 1:
                    if len(tml_ids) == 0:
                        str_tmls = ''
                    else:
                        str_tmls = ' where a.rtu_id in ({0}) '.format(
                            ','.join([str(a) for a in tml_ids]))

                    strsql = '''select a.rtu_id,a.rtu_fid,
                    b.mru_addr_1,b.mru_addr_2,b.mru_addr_3,b.mru_addr_4,b.mru_addr_5,b.mru_addr_6
                    from {0}.para_base_equipment as a left join {0}.para_mru as b on a.rtu_id=b.rtu_id {1} '''.format(
                        self._db_name, str_tmls)

                    yield self.update_cache()
                    record_total, buffer_tag, paging_idx, paging_total, cur = yield self.mydata_collector(
                        strsql, need_fetch=1)

                    for d in cur:
                        if int(d[1]) > 0:
                            tra = 2
                        else:
                            tra = 1
                        tcsmsg = libiisi.initRtuJson(
                            mod=2,
                            src=7,
                            ver=1,
                            tver=1,
                            tra=tra,
                            cmd='wlst.mru.9100',
                            ip=self.request.remote_ip,
                            port=0,
                            addr=','.join(
                                [str(a) for a in self.get_phy_list([d[1]])]),
                            data=dict(
                                addr1=int(d[2]),
                                addr2=int(d[3]),
                                addr3=int(d[4]),
                                addr4=int(d[5]),
                                addr5=int(d[6]),
                                addr6=int(d[7]),
                                ver=rqmsg.dev_ver,
                                type=rqmsg.data_mark,
                                date=rqmsg.dt_mark,
                                br=rqmsg.baud_rate))
                        # libiisi.set_to_send(tcsmsg, 0, False)
                        print(tcsmsg)
                        libiisi.send_to_zmq_pub(
                            'tcs.req.{0}.wlst.mru.9100'.format(
                                libiisi.cfg_tcs_port),
                            json.dumps(tcsmsg, separators=(',', ':')).lower())
            else:
                msg.head.if_st = 11

        self.write(mx.code_pb2(msg, self._go_back_format))
        self.finish()
        del msg, rqmsg, user_data, user_uuid
예제 #24
0
    def post(self):
        user_data, rqmsg, msg, user_uuid = yield self.check_arguments(
            msgws.rqRtuCtl(), None)

        env = False
        event_id = 0
        if user_data is not None:
            try:
                tver = int(self.get_argument('tver'))
            except:
                tver = 1
            if user_data['user_auth'] in libiisi.can_exec:
                env = True
                self.get_eventinfo()
                dosomething = False
                for x in list(rqmsg.rtu_do):
                    event_id = 0
                    if len(x.tml_id) == 0:
                        continue
                    dosomething = True
                    tcsdata = dict()

                    # 验证用户可操作的设备id
                    yield self.update_cache('x', user_uuid)
                    if 0 in user_data['area_x'] or user_data['is_buildin'] == 1:
                        rtu_ids = ','.join(
                            [str(a) for a in self.get_phy_list(x.tml_id)])
                    else:
                        rtu_ids = ','.join([
                            str(a) for a in self.get_phy_list(
                                self.check_tml_x(user_uuid, list(x.tml_id)))
                        ])
                    if len(rtu_ids) > 0:
                        if x.opt == 1:  # 单回路操作
                            event_id = 19
                            i = 0
                            for k in list(x.loop_do):
                                if k in (0, 1):
                                    tcsdata['k'] = i
                                    tcsdata['o'] = k
                                    tcsmsg = libiisi.initRtuJson(
                                        2, 7, 1, 1, 1, 'wlst.rtu.2210',
                                        self.request.remote_ip, 0, rtu_ids,
                                        tcsdata)
                                    # libiisi.set_to_send(tcsmsg, 0, False)
                                    libiisi.send_to_zmq_pub(
                                        'tcs.req.{0}.wlst.rtu.2210'.format(
                                            libiisi.cfg_tcs_port),
                                        json.dumps(tcsmsg,
                                                   separators=(',',
                                                               ':')).lower())
                                i += 1
                        elif x.opt == 2:  # 多回路操作
                            event_id = 19
                            if tver == 1:
                                i = 1
                                for k in list(x.loop_do):
                                    tcsdata['k{0}'.format(i)] = k
                                    if i == 6:
                                        break
                                    i += 1
                                tcsmsg = libiisi.initRtuJson(
                                    2, 7, 1, 1, 1, 'wlst.rtu.4b00',
                                    self.request.remote_ip, 0, rtu_ids,
                                    tcsdata)
                                # libiisi.set_to_send(tcsmsg, 0, False)
                                libiisi.send_to_zmq_pub(
                                    'tcs.req.{0}.wlst.rtu.4b00'.format(
                                        libiisi.cfg_tcs_port),
                                    json.dumps(tcsmsg,
                                               separators=(',', ':')).lower())
                            elif tver == 2:
                                tcsmsg = libiisi.initRtuProtobuf(
                                    cmd='ahhf.rtu.4b00', tver=tver)
                                tcsmsg.wlst_tml.wlst_rtu_4b00.operation.extend(
                                    list(x.loop_do))
                                libiisi.send_to_zmq_pub(
                                    'tcs.req.{0}.{1}'.format(
                                        libiisi.cfg_tcs_port, tcsmsg.head.cmd),
                                    tcsmsg.SerializeToString())
                        elif x.opt == 3:  # 停运
                            event_id = 17
                            tcsmsg = libiisi.initRtuJson(
                                2, 7, 1, 1, 1, 'wlst.rtu.2800',
                                self.request.remote_ip, 0, rtu_ids, tcsdata)
                            # libiisi.set_to_send(tcsmsg, 0, False)
                            libiisi.send_to_zmq_pub(
                                'tcs.req.{0}.wlst.rtu.2800'.format(
                                    libiisi.cfg_tcs_port),
                                json.dumps(tcsmsg,
                                           separators=(',', ':')).lower())
                        elif x.opt == 4:  # 解除停运
                            event_id = 18
                            tcsmsg = libiisi.initRtuJson(
                                2, 7, 1, 1, 1, 'wlst.rtu.2900',
                                self.request.remote_ip, 0, rtu_ids, tcsdata)
                            # libiisi.set_to_send(tcsmsg, 0, False)
                            libiisi.send_to_zmq_pub(
                                'tcs.req.{0}.wlst.rtu.2900'.format(
                                    libiisi.cfg_tcs_port),
                                json.dumps(tcsmsg,
                                           separators=(',', ':')).lower())
                if not dosomething:
                    msg.head.if_st = 11
                contents = u'{0},build-in user from {1} ctrl rtu '.format(
                    libiisi.events_def.get(event_id), self.request.remote_ip)
            else:
                msg.head.if_st = 11

        self.write(mx.code_pb2(msg, self._go_back_format))
        self.finish()
        if env:
            cur = yield self.write_event(event_id,
                                         contents,
                                         2,
                                         user_name=user_data['user_name'],
                                         app_unique=rqmsg.head.unique)
        del msg, rqmsg, user_data, user_uuid
예제 #25
0
    def post(self):
        user_data, rqmsg, msg, user_uuid = yield self.check_arguments(
            msgws.rqQueryDataRtu(), msgws.QueryDataRtu())
        if user_data is not None:
            if user_data['user_auth'] in libiisi.can_read:
                sdt, edt = self.process_input_date(rqmsg.dt_start,
                                                   rqmsg.dt_end,
                                                   to_chsarp=1)
                msg.type = rqmsg.type
                yield self.update_cache("r", user_uuid)

                # 验证用户可操作的设备id
                if 0 in user_data['area_r'] or user_data['is_buildin'] == 1:
                    if len(rqmsg.tml_id) > 0:
                        tml_ids = list(rqmsg.tml_id)
                    else:
                        tml_ids = []
                else:
                    if len(rqmsg.tml_id) > 0:
                        tml_ids = self.check_tml_r(user_uuid,
                                                   list(rqmsg.tml_id))
                    else:
                        tml_ids = libiisi.cache_tml_r[user_uuid]
                    if len(tml_ids) == 0:
                        msg.head.if_st = 11

                if msg.head.if_st == 1:
                    if len(tml_ids) == 0:
                        str_tmls = ''
                    else:
                        str_tmls = ' and a.rtu_id in ({0}) '.format(','.join(
                            [str(a) for a in tml_ids]))

                    if rqmsg.type == 0:  # 最新数据
                        strsql = 'select a.TABLE_NAME from information_schema.VIEWS as a where a.TABLE_NAME="data_rtu_view_new" and a.TABLE_SCHEMA="{0}"'.format(
                            self._db_name_data)
                        cur = libiisi.m_sql.run_fetch(strsql)
                        has_view = False
                        if cur is not None:
                            if len(cur) > 0:
                                has_view = True
                        del cur
                        # try:
                        # d = cur.next()
                        # has_view = True
                        # except:
                        #     pass
                        if has_view:
                            strsql = '''select a.date_create, a.rtu_id,a.rtu_voltage_a,a.rtu_voltage_b,a.rtu_voltage_c,
                                    a.rtu_current_sum_a,a.rtu_current_sum_b,a.rtu_current_sum_c,
                                    a.rtu_alarm,a.switch_out_attraction,a.loop_id,a.v,a.a,a.power,
                                    a.power_factor,a.bright_rate,a.switch_in_state,a.a_over_range,a.v_over_range,a.temperature,
                                    c.loop_name,b.rtu_phy_id,b.rtu_name,c.switch_output_id
                                    from {2}.data_rtu_view_new as a
                                    right join {0}.para_rtu_loop_info as c on a.rtu_id=c.rtu_id and a.loop_id=c.loop_id
                                    right join {0}.para_base_equipment as b on a.rtu_id=b.rtu_id
                                    where a.temperature>-50 {1}
                                    order by a.rtu_id,a.loop_id'''.format(
                                self._db_name, str_tmls, self._db_name_data)
                        else:
                            strsql = '''select x.*,a.rtu_voltage_a,a.rtu_voltage_b,a.rtu_voltage_c,
                                    a.rtu_current_sum_a,a.rtu_current_sum_b, a.rtu_current_sum_c,a.rtu_alarm,a.switch_out_attraction,
                                    d.loop_id,d.v,d.a,d.power,d.power_factor,d.bright_rate,d.switch_in_state,d.a_over_range,d.v_over_range,a.temperature,
                                    c.loop_name,b.rtu_phy_id,b.rtu_name,c.switch_output_id
                                    from
                                    (select max(a.date_create) as date_create,a.rtu_id
                                    from {2}.data_rtu_record as a where a.temperature>-50 {1} group by a.rtu_id) as x
                                    left join {2}.data_rtu_record as a on x.rtu_id=a.rtu_id and x.date_create=a.date_create
                                    left join {2}.data_rtu_loop_record as d on x.rtu_id=d.rtu_id and x.date_create=d.date_create
                                    right join {0}.para_base_equipment as b on x.rtu_id=b.rtu_id
                                    right join {0}.para_rtu_loop_info as c on d.rtu_id=c.rtu_id and d.loop_id=c.loop_id'''.format(
                                self._db_name, str_tmls, self._db_name_data)

                            # strsql = 'select a.date_create,a.rtu_id,a.rtu_voltage_a,a.rtu_voltage_b,a.rtu_voltage_c, \
                            # a.rtu_current_sum_a,a.rtu_current_sum_b, a.rtu_current_sum_c,a.rtu_alarm,a.switch_out_attraction, \
                            # a.loop_id,a.v,a.a,a.power,a.power_factor,a.bright_rate,a.switch_in_state,a.a_over_range,a.v_over_range,c.loop_name \
                            # from {0}_data.data_rtu_view as a left join {0}.para_rtu_loop_info as c on a.rtu_id=c.rtu_id and a.loop_id=c.loop_id \
                            # where EXISTS \
                            # (select rtu_id,date_create from \
                            # (select rtu_id,max(date_create) as date_create from {0}_data.data_rtu_view group by rtu_id) as t \
                            # where t.rtu_id=a.rtu_id and t.date_create=a.date_create) {1} order by a.date_create desc,a.rtu_id,a.loop_id;'.format(
                            #     self._db_name, str_tmls)
                    else:
                        if len(tml_ids) != 1:
                            strsql = ""
                        else:
                            # 徐坤说把right join 改成join, 后面加where
                            strsql = '''select x.*,c.loop_name,b.rtu_phy_id,b.rtu_name,c.switch_output_id from
                                    (select a.date_create, a.rtu_id,a.rtu_voltage_a,a.rtu_voltage_b,a.rtu_voltage_c,
                                    a.rtu_current_sum_a,a.rtu_current_sum_b,a.rtu_current_sum_c,
                                    a.rtu_alarm,a.switch_out_attraction,a.loop_id,a.v,a.a,a.power,
                                    a.power_factor,a.bright_rate,a.switch_in_state,a.a_over_range,a.v_over_range,a.temperature
                                    from {5}.data_rtu_view as a
                                    where a.temperature>-50 and a.date_create>={1} and a.date_create<={2} {3}) as x
                                    join {0}.para_base_equipment as b on x.rtu_id=b.rtu_id
                                    join {0}.para_rtu_loop_info as c on x.rtu_id=c.rtu_id and x.loop_id=c.loop_id
                                    where 1=1 {6} 
                                    ORDER BY x.rtu_id ,x.date_create'''.format(
                                self._db_name, sdt, edt, str_tmls,
                                self._fetch_limited, self._db_name_data,
                                str_tmls.replace("a.", "c."))
                        # strsql = '''select a.date_create, a.rtu_id,a.rtu_voltage_a,a.rtu_voltage_b,a.rtu_voltage_c,
                        # a.rtu_current_sum_a,a.rtu_current_sum_b,a.rtu_current_sum_c,
                        # a.rtu_alarm,a.switch_out_attraction,a.loop_id,a.v,a.a,a.power,
                        # a.power_factor,a.bright_rate,a.switch_in_state,a.a_over_range,a.v_over_range,
                        # c.loop_name from {0}_data.data_rtu_view as a
                        # left join {0}.para_rtu_loop_info as c on a.rtu_id=c.rtu_id and a.loop_id=c.loop_id
                        # where a.date_create>={1} and a.date_create<={2} {3}
                        # order by a.rtu_id,a.date_create desc,a.loop_id'''.format(self._db_name, sdt,
                        #                                                          edt, str_tmls)
                    record_total, buffer_tag, paging_idx, paging_total, cur = yield self.mydata_collector(
                        strsql,
                        need_fetch=1,
                        buffer_tag=msg.head.paging_buffer_tag,
                        paging_idx=msg.head.paging_idx,
                        paging_num=msg.head.paging_num,
                        multi_record=[0, 1],
                        key_column=20)
                    if record_total is None:
                        msg.head.if_st = 45
                    else:
                        drv = msgws.QueryDataRtu.DataRtuView()

                        msg.head.paging_record_total = record_total
                        msg.head.paging_buffer_tag = buffer_tag
                        msg.head.paging_idx = paging_idx
                        msg.head.paging_total = paging_total
                        for d in cur:
                            if d[0] is None:
                                continue
                            if drv.tml_id != int(
                                    d[1]) or drv.dt_receive != mx.switchStamp(
                                        int(d[0])):
                                if drv.tml_id > 0:
                                    msg.data_rtu_view.extend([drv])
                                    drv = msgws.QueryDataRtu.DataRtuView()
                                drv.tml_id = int(d[1])
                                drv.dt_receive = mx.switchStamp(int(d[0]))
                                drv.voltage_a = float(d[2])
                                drv.voltage_b = float(d[3])
                                drv.voltage_c = float(d[4])
                                drv.current_sum_a = float(d[5])
                                drv.current_sum_b = float(d[6])
                                drv.current_sum_c = float(d[7])
                                # drv.alarm_st.extend([int(a) for a in '{0:08b}'.format(int(d[
                                #     8]))[::-1]])
                                s = [0, 0, 0, 0, 0, 0, 0, 0]
                                for r in list(str(d[8])):
                                    s[int(r) - 1] = 1
                                drv.alarm_st.extend(s)
                                x = d[9][:len(d[9]) - 1].split(';')
                                drv.switch_out_st.extend(
                                    [1 if a == 'True' else 0 for a in x])
                                drv.phy_id = int(
                                    d[21]) if d[21] is not None else -1
                                drv.tml_name = d[22] if d[
                                    22] is not None else ''
                                drv.temperature = d[19]
                            # if d[19] is not None:
                            if d[10] is not None:
                                drlv = msgws.QueryDataRtu.LoopView()
                                drlv.loop_id = int(d[10])
                                drlv.voltage = float(d[11] / 100.0)
                                drlv.current = float(d[12] / 100.0)
                                drlv.power = float(d[13] / 100.0)
                                drlv.factor = float(d[14])
                                drlv.rate = float(d[15])
                                drlv.switch_in_st = int(d[16])
                                drlv.current_over_range = int(d[17])
                                drlv.voltage_over_range = int(d[18])
                                drlv.loop_name = d[20] if d[
                                    20] is not None else ''
                                drlv.loop_switchout_id = d[23] if d[
                                    23] is not None else 0
                                drv.loop_view.extend([drlv])
                                del drlv
                        if drv.tml_id > 0:
                            msg.data_rtu_view.extend([drv])
                    del cur, strsql

        self.write(mx.code_pb2(msg, self._go_back_format))
        self.finish()
        del msg, rqmsg, user_data, user_uuid
예제 #26
0
    def post(self):
        user_data, rqmsg, msg, user_uuid = yield self.check_arguments(
            msgws.rqQueryDataRtuElec(), msgws.QueryDataRtuElec())
        if user_data is not None:
            if user_data['user_auth'] in libiisi.can_read:
                sdt, edt = self.process_input_date(rqmsg.dt_start,
                                                   rqmsg.dt_end,
                                                   to_chsarp=1)
                yield self.update_cache("r", user_uuid)

                # 验证用户可操作的设备id
                if 0 in user_data['area_r'] or user_data['is_buildin'] == 1:
                    if len(rqmsg.tml_id) > 0:
                        tml_ids = list(rqmsg.tml_id)
                    else:
                        tml_ids = []
                else:
                    if len(rqmsg.tml_id) > 0:
                        tml_ids = self.check_tml_r(user_uuid,
                                                   list(rqmsg.tml_id))
                    else:
                        tml_ids = libiisi.cache_tml_r[user_uuid]
                    if len(tml_ids) == 0:
                        msg.head.if_st = 11

                if msg.head.if_st == 1:
                    if len(tml_ids) == 0:
                        str_tmls = ''
                    else:
                        str_tmls = ' and a.rtu_id in ({0}) '.format(','.join(
                            [str(a) for a in tml_ids]))

                    if rqmsg.data_mark == 0:
                        strsql = 'select a.date_create,a.rtu_id,a.loop_id,a.minutes_open,a.power \
                        from {5}.info_rtu_elec as a \
                        where a.date_create>={1} and a.date_create<={2} {3} \
                        order by a.date_create desc,a.rtu_id,a.loop_id {4}'.format(
                            self._db_name, sdt, edt, str_tmls,
                            self._fetch_limited, self._db_name_data)
                    else:
                        strsql = 'select a.rtu_id,a.rtu_id,a.loop_id,sum(a.minutes_open) as m,sum(a.power) as p \
                        from {5}.info_rtu_elec as a \
                        where a.date_create>={1} and a.date_create<={2} {3} \
                        group by a.rtu_id,a.loop_id \
                        order by a.rtu_id,a.loop_id {4}'.format(
                            self._db_name, sdt, edt, str_tmls,
                            self._fetch_limited, self._db_name_data)

                    record_total, buffer_tag, paging_idx, paging_total, cur = yield self.mydata_collector(
                        strsql,
                        need_fetch=1,
                        buffer_tag=msg.head.paging_buffer_tag,
                        paging_idx=msg.head.paging_idx,
                        paging_num=msg.head.paging_num,
                        multi_record=[])

                    if record_total is None:
                        msg.head.if_st = 45
                    else:
                        msg.head.paging_record_total = record_total
                        msg.head.paging_buffer_tag = buffer_tag
                        msg.head.paging_idx = paging_idx
                        msg.head.paging_total = paging_total
                        for d in cur:
                            dv = msgws.QueryDataRtuElec.DataRtuElecView()
                            if rqmsg.data_mark == 0:
                                dv.dt_count = mx.switchStamp(int(d[0]))
                            dv.tml_id = int(d[1])
                            dv.loop_id = int(d[2])
                            dv.data_lenght = int(d[3])
                            dv.estimate_value = float(d[4])
                            msg.data_rtu_elec_view.extend([dv])
                            del dv
                        del cur, strsql

        self.write(mx.code_pb2(msg, self._go_back_format))
        self.finish()
        del msg, rqmsg, user_data, user_uuid
예제 #27
0
    def post(self):
        user_data, rqmsg, msg, user_uuid = yield self.check_arguments(
            msgws.rqQueryRtuTimeTableBind(), msgws.QueryRtuTimeTableBind())

        env = False
        if user_data is not None:
            sdt, edt = self.process_input_date(rqmsg.dt_start,
                                               rqmsg.dt_end,
                                               to_chsarp=0)
            msg.data_mark = rqmsg.data_mark
            yield self.update_cache("r", user_uuid)

            # 验证用户可操作的设备id
            if 0 in user_data['area_r'] or user_data['is_buildin'] == 1:
                if len(rqmsg.tml_id) > 0:
                    tml_ids = list(rqmsg.tml_id)
                else:
                    tml_ids = []
            else:
                if len(rqmsg.tml_id) > 0:
                    tml_ids = self.check_tml_r(user_uuid, list(rqmsg.tml_id))
                else:
                    tml_ids = libiisi.cache_tml_r[user_uuid]
                if len(tml_ids) == 0:
                    msg.head.if_st = 11

            if msg.head.if_st == 1:
                if len(tml_ids) == 0:
                    str_tmls = ''
                else:
                    str_tmls = ' and a.rtu_or_grp_id in ({0}) '.format(
                        ','.join([str(a) for a in tml_ids]))
                if len(rqmsg.tml_loop_id) > 0:
                    str_loops = ' and a.loop_id in ({0})'.format(','.join(
                        [str(a) for a in rqmsg.tml_loop_id]))
                else:
                    str_loops = ''
                dt = time.localtime(time.time())
                y = str(dt[0])
                m = '{0:02d}'.format(dt[1])
                d = '{0:02d}'.format(dt[2])
                if rqmsg.data_mark == 0:
                    dt_today = int(m + d)
                    dt_week = dt[6] + 1 if dt[6] < 6 else 0
                    strsql = 'select a.rtu_or_grp_id,a.loop_id,a.time_id, \
                    b.time_name,b.lux_on_value,b.lux_off_value, b.light_on_offset,b.light_off_offset, \
                    c.date_start,c.date_end,c.timetable_section_id,c.type_on,c.type_off,c.time_on,c.time_off,c.dayOfWeekUsed \
                    from {0}.rtu_timetable_reference as a \
                    left join {0}.time_table_info as b on a.time_id=b.time_id \
                    left join {0}.time_table_rule_info as c on a.time_id = c.time_id \
                    where c.date_start<={1} and c.date_end >={1} and c.dayOfWeekUsed like "%{2}%" {3} {4} \
                    order by a.rtu_or_grp_id,a.loop_id,a.time_id,c.timetable_section_id'.format(
                        self._db_name, dt_today, dt_week, str_tmls, str_loops)

                    record_total, buffer_tag, paging_idx, paging_total, cur = yield self.mydata_collector(
                        strsql,
                        need_fetch=1,
                        buffer_tag=msg.head.paging_buffer_tag,
                        paging_idx=msg.head.paging_idx,
                        paging_num=msg.head.paging_num,
                        multi_record=[0])
                    if record_total is None:
                        msg.head.if_st = 45
                    else:
                        for d in cur:
                            dv = msgws.QueryRtuTimeTableBind.TimeTableBindView(
                            )
                            dv.tml_id = d[0]
                            dv.tml_loop_id = d[1]
                            dv.tt_on_type = d[11]
                            if d[11] == 1:
                                dv.turn_on = d[4]
                            elif d[11] == 2:
                                r, s = self.get_sunriseset(dt_today)
                                dv.turn_on = s + d[6]
                            elif d[11] == 3:
                                dv.turn_on = d[13]
                            dv.tt_off_type = d[12]
                            if d[12] == 1:
                                dv.turn_off = d[5]
                            elif d[12] == 2:
                                r, s = self.get_sunriseset(dt_today)
                                dv.turn_off = r + d[7]
                            elif d[12] == 3:
                                dv.turn_off = d[14]
                            dv.dt_ctl = int(time.time())
                            dv.tt_section_id = d[10]
                            msg.timetable_bind_view.extend([dv])
                            del dv

        self.write(mx.code_pb2(msg, self._go_back_format))
        self.finish()
        del msg, rqmsg, user_data, user_uuid
예제 #28
0
파일: errinfo.py 프로젝트: xyzj/lump
    def post(self):
        user_data, rqmsg, msg, user_uuid = yield self.check_arguments(
            msgws.rqQueryDataErr(), msgws.QueryDataErr())

        if user_data is not None:
            if user_data['user_auth'] in libiisi.can_read:
                sdt, edt = self.process_input_date(
                    rqmsg.dt_start, rqmsg.dt_end, to_chsarp=1)
                msg.type = rqmsg.type

                yield self.update_cache("r", user_uuid)
                if len(rqmsg.err_id) == 0:
                    str_errs = ''
                else:
                    str_errs = ' and a.fault_id in ({0}) '.format(
                        ','.join([str(a) for a in rqmsg.err_id]))
                # 验证用户可操作的设备id
                if 0 in user_data['area_r'] or user_data['is_buildin'] == 1:
                    if len(rqmsg.tml_id) > 0:
                        tml_ids = list(rqmsg.tml_id)
                    else:
                        tml_ids = []
                else:
                    if len(rqmsg.tml_id) > 0:
                        tml_ids = self.check_tml_r(user_uuid, list(
                            rqmsg.tml_id))
                    else:
                        tml_ids = libiisi.cache_tml_r[user_uuid]
                    if len(tml_ids) == 0:
                        msg.head.if_st = 11

                if msg.head.if_st == 1:
                    if len(tml_ids) == 0:
                        str_tmls = ''
                    else:
                        str_tmls = ' and a.rtu_id in ({0}) '.format(
                            ','.join([str(a) for a in tml_ids]))

                    if rqmsg.confirm_type == 0:
                        str_confirm = ""
                    else:
                        str_confirm = " and a.confirm = {0}".format(
                            rqmsg.confirm_type)

                    if rqmsg.type == 0:  # 现存故障
                        strsql = 'select a.fault_id,b.fault_name,a.rtu_id,a.date_create,a.date_create, \
                        c.rtu_phy_id,c.rtu_name,a.loop_id,a.lamp_id,a.remark,a.error_count,a.v,a.a,b.fault_name_define,d.loop_name, \
                        a.confirm,a.svr_ip,a.svr_name,a.app_name \
                        from {2}.info_fault_exist as a left join {0}.fault_types as b \
                        on a.fault_id=b.fault_id right join {0}.para_base_equipment as c on a.rtu_id=c.rtu_id \
                        left join {0}.para_rtu_loop_info as d on a.rtu_id=d.rtu_id and a.loop_id=d.loop_id \
                        where a.date_create>={1} {3}'.format(
                            self._db_name, sdt, self._db_name_data,
                            str_confirm)
                        if edt > 0:
                            strsql += ' and a.date_create<={0}'.format(edt)
                        if len(str_tmls) > 0:
                            strsql += ' {0}'.format(str_tmls)
                        if len(str_errs) > 0:
                            strsql += ' {0}'.format(str_errs)
                        strsql += ' order by a.date_create desc {0}'.format(
                            self._fetch_limited)
                    elif rqmsg.type == 1:  # 历史故障
                        strsql = 'select a.fault_id,b.fault_name,a.rtu_id,a.date_create,a.date_remove, \
                        c.rtu_phy_id,c.rtu_name,a.loop_id,a.lamp_id,a.remark,a.lamp_id,a.v,a.a,b.fault_name_define,d.loop_name, \
                        a.confirm,a.svr_ip,a.svr_name,a.app_name \
                        from {3}.info_fault_history as a left join {0}.fault_types as b \
                        on a.fault_id=b.fault_id right join {0}.para_base_equipment as c on a.rtu_id=c.rtu_id \
                        left join {0}.para_rtu_loop_info as d on a.rtu_id=d.rtu_id and a.loop_id=d.loop_id \
                        where a.date_create <={1} and a.date_create >={2} {4}'.format(
                            self._db_name, edt, sdt, self._db_name_data,
                            str_confirm)
                        if len(str_tmls) > 0:
                            strsql += ' {0}'.format(str_tmls)
                        if len(str_errs) > 0:
                            strsql += ' {0}'.format(str_errs)
                        strsql += ' order by a.date_create desc {0}'.format(
                            self._fetch_limited)
                    elif rqmsg.type == 2:  # 现存仅返回数量
                        strsql = '''select count(a.rtu_id) from {3}.info_fault_exist as a
                                    where a.date_create >=0'''.format(
                            self._db_name, edt, sdt, self._db_name_data)
                        if len(str_tmls) > 0:
                            strsql += ' {0}'.format(str_tmls)
                        if len(str_errs) > 0:
                            strsql += ' {0}'.format(str_errs)
                    elif rqmsg.type == 3:  # 历史仅返回数量
                        strsql = '''select count(a.rtu_id) from {3}.info_fault_history as a
                                    where a.date_create <={1} and a.date_create >={2} {4}'''.format(
                            self._db_name, edt, sdt, self._db_name_data,
                            str_confirm)
                        if len(str_tmls) > 0:
                            strsql += ' {0}'.format(str_tmls)
                        if len(str_errs) > 0:
                            strsql += ' {0}'.format(str_errs)
                    if rqmsg.type in (0, 1):
                        np = 1
                    else:
                        np = 0
                    record_total, buffer_tag, paging_idx, paging_total, cur = yield self.mydata_collector(
                        strsql,
                        need_fetch=1,
                        need_paging=np,
                        buffer_tag=rqmsg.head.paging_buffer_tag,
                        paging_idx=rqmsg.head.paging_idx,
                        paging_num=rqmsg.head.paging_num)
                    if record_total is None:
                        msg.head.if_st = 45
                    else:
                        msg.head.paging_record_total = record_total
                        msg.head.paging_buffer_tag = buffer_tag
                        msg.head.paging_idx = paging_idx
                        msg.head.paging_total = paging_total
                        if rqmsg.type in (0, 1):
                            for d in cur:
                                errview = msgws.QueryDataErr.ErrView()
                                errview.err_id = int(d[0])
                                errview.err_name = d[
                                    13] if d[13] is not None else ''
                                errview.tml_id = int(d[2])
                                errview.dt_create = mx.switchStamp(int(d[3]))
                                errview.dt_remove = mx.switchStamp(int(d[4]))
                                errview.phy_id = int(
                                    d[5]) if d[5] is not None else 0
                                errview.tml_name = d[
                                    6] if d[6] is not None else ''
                                errview.tml_sub_id1 = int(d[7])
                                errview.tml_sub_id2 = int(d[8])
                                errview.remark = d[9]
                                errview.err_count = int(d[10])
                                errview.voltage = float(d[11])
                                errview.current = float(d[12])
                                # errview.err_name_custome = d[13]
                                errview.tml_loop_name = d[
                                    14] if d[14] is not None else ""
                                # 武汉特殊,融断器开路,火零不平衡报警取消回路名称结尾的’火线’二字
                                if errview.err_id in (25, 26):
                                    if errview.tml_loop_name.endswith(u'火线'):
                                        errview.tml_loop_name = errview.tml_loop_name.replace(
                                            u'火线', u'')
                                # 广州新增
                                errview.confirm_type = int(d[15])
                                errview.server_ip = d[16]
                                errview.server_name = d[17]
                                errview.app_name = d[18]
                                msg.err_view.extend([errview])
                                del errview
                        elif rqmsg.type in (2, 3):
                            msg.head.paging_record_total = cur[0][0]
                    del cur, strsql

        self.write(mx.code_pb2(msg, self._go_back_format))
        self.finish()
        del msg, rqmsg, user_data, user_uuid
예제 #29
0
    def post(self):
        user_data, rqmsg, msg, user_uuid = yield self.check_arguments(
            msgws.rqQueryDataMru(), msgws.QueryDataMru())

        if user_data is not None:
            if user_data['user_auth'] in libiisi.can_read:
                yield self.update_cache("r", user_uuid)
                sdt, edt = self.process_input_date(
                    rqmsg.dt_start, rqmsg.dt_end, to_chsarp=1)
                if sdt + edt > 0:
                    strdt = ' and a.date_create>={0} and a.date_create<={1}'.format(
                        sdt, edt)
                else:
                    strdt = ''
                # 验证用户可操作的设备id
                if 0 in user_data['area_r'] or user_data['is_buildin'] == 1:
                    if len(rqmsg.tml_id) > 0:
                        tml_ids = list(rqmsg.tml_id)
                    else:
                        tml_ids = []
                else:
                    if len(rqmsg.tml_id) > 0:
                        tml_ids = self.check_tml_r(user_uuid, list(
                            rqmsg.tml_id))
                    else:
                        tml_ids = libiisi.cache_tml_r[user_uuid]
                    if len(tml_ids) == 0:
                        msg.head.if_st = 11

                if msg.head.if_st == 1:
                    if len(tml_ids) == 0:
                        str_tmls = ''
                    else:
                        str_tmls = ' and a.meter_address in ({0}) '.format(
                            ','.join([str(a) for a in tml_ids]))
                    if rqmsg.company_id == -1:
                        str_companyid = ''
                    else:
                        str_companyid = ' and a.company_id = {0} '.format(
                            rqmsg.company_id)

                    strsql = '''select a.date_create,a.meter_address,a.data_value,b.rtu_name,a.company_id
                            from {0}.meter_day as a
                            left join {0}.para_meter as b on a.meter_address=b.meter_address
                            where 1=1 {1} {2} {3} {4}'''.format(
                        self._db_name_data, strdt, str_tmls, str_companyid,
                        self._fetch_limited)
                    record_total, buffer_tag, paging_idx, paging_total, cur = yield self.mydata_collector(
                        strsql,
                        need_fetch=1,
                        buffer_tag=msg.head.paging_buffer_tag,
                        paging_idx=msg.head.paging_idx,
                        paging_num=msg.head.paging_num)
                    if record_total is None:
                        msg.head.if_st = 45
                    else:
                        msg.head.paging_record_total = record_total
                        msg.head.paging_buffer_tag = buffer_tag
                        msg.head.paging_idx = paging_idx
                        msg.head.paging_total = paging_total
                        for d in cur:
                            dv = msgws.QueryDataMru.DataMruView()
                            dv.dt_create = mx.switchStamp(int(d[0]))
                            dv.tml_id = int(d[1])
                            dv.dt_mark = 0
                            dv.data_mark = 4
                            dv.mru_value = float(
                                d[2]) if d[2] is not 0 else 0.0
                            dv.mru_name = d[3] if d[3] is not None else ''
                            dv.company_id = d[4]
                            msg.data_mru_view.extend([dv])
                    del cur, strsql

        self.write(mx.code_pb2(msg, self._go_back_format))
        self.finish()
        del msg, rqmsg, user_data
예제 #30
0
    def post(self):
        user_data, rqmsg, msg, user_uuid = yield self.check_arguments(
            msgws.rqQueryDataMru(), msgws.QueryDataMru())

        if user_data is not None:
            if user_data['user_auth'] in libiisi.can_read:
                yield self.update_cache("r", user_uuid)
                sdt, edt = self.process_input_date(
                    rqmsg.dt_start, rqmsg.dt_end, to_chsarp=1)
                if sdt + edt > 0:
                    strdt = ' and a.date_create>={0} and a.date_create<={1}'.format(
                        sdt, edt)
                else:
                    strdt = ''
                # 验证用户可操作的设备id
                if 0 in user_data['area_r'] or user_data['is_buildin'] == 1:
                    if len(rqmsg.tml_id) > 0:
                        tml_ids = list(rqmsg.tml_id)
                    else:
                        tml_ids = []
                else:
                    if len(rqmsg.tml_id) > 0:
                        tml_ids = self.check_tml_r(user_uuid, list(
                            rqmsg.tml_id))
                    else:
                        tml_ids = libiisi.cache_tml_r[user_uuid]
                    if len(tml_ids) == 0:
                        msg.head.if_st = 11

                if msg.head.if_st == 1:
                    if len(tml_ids) == 0:
                        str_tmls = ''
                    else:
                        str_tmls = ' and a.rtu_id in ({0}) '.format(
                            ','.join([str(a) for a in tml_ids]))
                    if sdt == 0 and edt == 0:  # 最新数据
                        strsql = '''select a.rtu_id,a.date_create,a.date_type_code,a.mru_type_code,a.mru_data,
                        (b.mru_ratio * a.mru_data) / 5 as elec,c.rtu_name
                        from {3}.data_mru_record as a
                        left join {0}.para_mru as b on a.rtu_id=b.rtu_id
                        left join {0}.para_base_equipment as c on c.rtu_id = a.rtu_id
                        where EXISTS
                        (select rtu_id,date_create from
                        (select rtu_id,max(date_create) as date_create from {3}.data_mru_record group by rtu_id) as t
                        where a.rtu_id=t.rtu_id and a.date_create=t.date_create) {1} {2} order by a.rtu_id,a.date_create desc'''.format(
                            self._db_name, strdt, str_tmls, self._db_name_data)
                    else:
                        strsql = '''select a.rtu_id,a.date_create,a.date_type_code,a.mru_type_code,a.mru_data,
                                (b.mru_ratio * a.mru_data) / 5 as elec,c.rtu_name
                                from {5}.data_mru_record as a
                                left join {0}.para_mru as b on a.rtu_id=b.rtu_id
                                left join {0}.para_base_equipment as c on c.rtu_id = a.rtu_id
                                where a.date_create>={1} and a.date_create<={2} {3} {4}'''.format(
                            self._db_name, sdt, edt, str_tmls,
                            self._fetch_limited, self._db_name_data)

                    record_total, buffer_tag, paging_idx, paging_total, cur = yield self.mydata_collector(
                        strsql,
                        need_fetch=1,
                        buffer_tag=msg.head.paging_buffer_tag,
                        paging_idx=msg.head.paging_idx,
                        paging_num=msg.head.paging_num)
                    if record_total is None:
                        msg.head.if_st = 45
                    else:
                        msg.head.paging_record_total = record_total
                        msg.head.paging_buffer_tag = buffer_tag
                        msg.head.paging_idx = paging_idx
                        msg.head.paging_total = paging_total
                        for d in cur:
                            dv = msgws.QueryDataMru.DataMruView()
                            dv.dt_create = mx.switchStamp(int(d[1]))
                            dv.tml_id = int(d[0])
                            dv.dt_mark = int(d[2])
                            dv.data_mark = int(d[3])
                            dv.mru_value = float(d[4])
                            dv.mru_elec = float(
                                d[5]) if d[5] is not None else 0
                            dv.mru_name = d[6] if d[5] is not None else ''
                            msg.data_mru_view.extend([dv])
                    del cur, strsql

        self.write(mx.code_pb2(msg, self._go_back_format))
        self.finish()
        del msg, rqmsg, user_data