Esempio n. 1
0
 def user_cancle_fixer_order(self):
     """用户取消维修订单"""
     if is_tourist():
         return TOKEN_ERROR(u'请先登录')
     if is_admin():
         return TOKEN_ERROR(u'请使用普通用户登录')
     data = parameter_required(('uftid', ))
     uftid = data.get('uftid')
     usid = request.user.id
     order = self.strade.get_fixer_order_by_uftid(uftid)
     if not order:
         raise NOT_FOUND(u'没有该订单')
     if order.USid != usid:  # 判断订单是否是该用户的
         raise NOT_FOUND(u'他人订单')
     if order.UFTstatus == 0:  # 如果订单状态是未付款
         canceled = self.strade.update_fixerorder_detail_by_uftid(
             uftid,
             {
                 'UFTstatus': 5  # 交易关闭
             })
         msg = u'操作完成' if canceled else u'无此记录'
     elif order.UFTstatus == 1:  # 订单状态是付款成功后的等待服务
         apply_forrefund = self.strade.update_fixerorder_detail_by_uftid(
             uftid,
             {
                 'UFTstatus': 3  # 申请退款中
             })
         msg = u'操作完成' if apply_forrefund else u'无此记录'
     elif order.UFTstatus == 3:
         raise PARAMS_ERROR(u'正在申请退款中')
     elif order.UFTstatus == 4:
         raise PARAMS_ERROR(u'退款中')
     else:
         raise PARAMS_ERROR(u'服务已完成或已关闭')
     return Success(msg, {'uftid': uftid})
Esempio n. 2
0
 def add_room(self):
     """添加房源"""
     if not is_admin():
         raise TOKEN_ERROR(u'请使用管理员登录')
     required = ('roname', 'roimage', 'roareanum', 'roface', 'roarea',
                 'roshowprice', 'roshowpriceunit', 'rorenttype',
                 'rodecorationstyle', 'rocitynum', 'roareanum',
                 'rosubwayaround', 'house', 'villegeid', 'medias', 'stfid')
     data = parameter_required(required, forbidden=(
         'roid',
         'hoid',
     ))
     house = data.pop('house', None)
     medias = data.pop('medias', [])
     tags = data.pop('tags', [])
     roomrequirment = data.pop('roomrequirment', None)
     # 是否存在小区
     villege = self.sroom.get_villege_info_by_id(data.get('villegeid'))
     if not villege:
         raise NOT_FOUND(u'请添加小区信息')
     # 初始化添加参数
     mod = {}
     roid = str(uuid.uuid4())
     create_time = datetime.strftime(datetime.now(), format_for_db)
     house['hoid'] = data['hoid'] = data['roid'] = roid
     # 添加房源
     data['ROcreatetime'] = create_time
     data['ROdistance'] = villege.subway_primary
     data['ROaroundequirment'] = villege.around
     data['ROsubwayposionname'] = villege.position
     mod['Room'] = data
     # 添加媒体
     try:
         map(lambda x: x.setdefault('roid', roid), medias)
         map(lambda x: x.setdefault('reid', str(uuid.uuid4())), medias)
         mod['RoomMedia'] = medias
     except Exception as e:
         raise PARAMS_ERROR(u'medias参数有误')
     # 添加house
     houseinfo_required = ('hofloor', 'hototalfloor', 'hobedroomcount',
                           'hoparlorcount')
     parameter_required(houseinfo_required, datafrom=house)
     house['VIid'] = data.get('villegeid')
     mod['House'] = house
     # 添加tag
     try:
         map(lambda x: x.setdefault('roid', roid), tags)
         map(lambda x: x.setdefault('rtid', str(uuid.uuid4())), tags)
         mod['RoomTag'] = tags
     except Exception as e:
         raise PARAMS_ERROR(u'tags参数有误')
     # 添加设备:
     if roomrequirment:
         roomrequirment['roid'] = roid
         roomrequirment['reid'] = str(uuid.uuid4())
         mod['RoomEquirment'] = roomrequirment
     self.sroom.add_models(mod)
     return Success(u'添加成功', {'roid': roid})
Esempio n. 3
0
 def _allow_starttime(str_time):
     try:
         startime = datetime.strptime(str_time, format_for_db)
     except Exception as e:
         raise PARAMS_ERROR(str(str_time) + u'时间格式不正确')
     time_on_road_seconds = (startime - datetime.now()).total_seconds()
     if MOVER_APPOINT_MIN_TIME_ON_ROAD < time_on_road_seconds < MOVER_APPOINT_MAX_TIME_ON_ROAD:
         return str_time
     raise PARAMS_ERROR(u'时间不合理')
Esempio n. 4
0
 def add_bedroom(self):
     """添加卧室, 以及卧室入住信息"""
     if not is_admin():
         raise TOKEN_ERROR(u'请使用管理员登录')
     data = parameter_required(('roid', 'bbrnum'),
                               forbidden=('bbrid', 'bbrstatus'))
     room = self.sroom.get_room_by_roid(data.get('roid'))
     mod = {}
     data['bbrid'] = str(uuid.uuid4())
     mod['BedroomBehindRoom'] = data
     if not room:
         raise NOT_FOUND(u'不存在的房源id')
     if 'bbrshowprice' in data:
         # 卧室未租出
         data['BBRstatus'] = 2
     elif 'usgender' in data:
         # 已经租出
         data['BBRstatus'] = 5
         mod['UserBedroomBehindRoom'] = {
             'UBBRid': str(uuid.uuid4()),
             'BBRid': data['bbrid'],
             'USgender': data.get('usgender')
         }
     else:
         raise PARAMS_ERROR(u'缺少必要的参数')
     self.sroom.add_models(mod)
     cache.delete('room_detail::{}'.format(data.get('roid')))
     return Success(u'添加成功', {'bbrid': data['bbrid']})
Esempio n. 5
0
 def check_refund(self):
     """查询是否退款"""
     # if not is_admin():
     #     raise TOKEN_ERROR(u'请使用管理员登录')
     data = parameter_required()
     if 'umtid' in data:
         umtid = data.get('umtid')
         order = self.strade.get_mover_order_by_umtid(umtid)
         if not order or order.UMTstatus != 4:
             raise NOT_FOUND()
         pass
     elif 'uctid' in data:
         uctid = data.get('uctid')
         order = self.strade.get_clean_order_by_uctid(uctid)
         if not order or order.UCTstatus != 4:
             raise NOT_FOUND()
     elif 'uftid' in data:
         uftid = data.get('uftid')
         order = self.strade.get_fixer_order_by_uftid(uftid)
         if not order or order.UFTstatus != 4:
             raise NOT_FOUND()
     else:
         raise PARAMS_ERROR()
     sn = order.sn
     try:
         res = self.pay.refund_query(out_trade_no=sn)
     except WeixinPayError as e:
         raise SYSTEM_ERROR(e.message)
     return Success(data=res)
Esempio n. 6
0
def parameter_required(required=None,
                       others='allow',
                       filter_none=True,
                       forbidden=None,
                       datafrom=None):
    """验证请求中必需的参数
    others: 如果是allow, 则代表不会清除其他参数
    filter_none: True表示会过滤到空值(空列表, 空字符串, None等除了0之外的False值)
    forbidden: 必需要清除的字段
    """
    if datafrom is None:
        data = request.json or request.args.to_dict() or {}
    else:
        data = datafrom
    if filter_none:
        data = {k: v for k, v in data.items() if v or v == 0}
    if required:
        missed = filter(lambda x: x not in data, required)
        if missed:
            raise PARAMS_ERROR(u'必要参数缺失或为空: ' + ', '.join(missed))
    if others != 'allow':
        data = {k: v for k, v in data.items() if k in required}
    if forbidden:
        data = {k: v for k, v in data.items() if k.lower() not in forbidden}
    return data
Esempio n. 7
0
def validate_arg(regex, arg, msg=None):
    if arg is None:
        return
    res = re.match(regex, str(arg))
    if not res:
        raise PARAMS_ERROR(msg)
    return arg
Esempio n. 8
0
 def point_staff(self):
     """给订单指定工作人员"""
     if not is_admin():
         raise TOKEN_ERROR(u'请使用管理员登录')
     data = parameter_required(('stfid', ))
     stfid = data.get('stfid')
     staff = self.suser.get_staff_by_stfid(stfid)
     if not staff:
         raise NOT_FOUND(u'不存在的工作人员')
     if staff.STFisblocked:
         raise NOT_FOUND(u'黑名单里的工作人员')
     response = {'stfid': stfid}
     # 如果是搬家服务
     if 'umtid' in data:
         umtid = data.get('umtid')
         mover_order = self.strade.get_mover_order_by_umtid(umtid)
         if mover_order.UMTstatus != 1:  # 只有等待服务的订单才可以制定
             raise PARAMS_ERROR(u'当前订单状态为{}, 只可以指定等待服务中的订单'.format(
                 SERVER_STATUS.get(mover_order.UMTstatus)))
         updated = self.strade.update_movertrade_detail_by_umtid(
             umtid, {'STFid': stfid})
         response['type'] = 'mover'
     elif 'uftid' in data:
         # 如果是维修
         uftid = data.get('uftid')
         fixer_order = self.strade.get_fixer_order_by_uftid(uftid)
         if fixer_order.UFTstatus != 1:
             raise PARAMS_ERROR(u'当前订单状态为{}, 只可以指定等待服务中的订单'.format(
                 SERVER_STATUS.get(fixer_order.UMTstatus)))
         updated = self.strade.update_fixerorder_detail_by_uftid(
             uftid, {'STFid': stfid})
         response['type'] = 'fixer'
     elif 'uctid' in data:
         # 如果是保洁
         uctid = data.get('uctid')
         cleaner_order = self.strade.get_clean_order_by_uctid(uctid)
         if cleaner_order.UCTstatus != 1:
             raise PARAMS_ERROR(u'当前订单状态为{}, 只可以指定等待服务中的订单'.format(
                 SERVER_STATUS.get(cleaner_order.UMTstatus)))
         updated = self.strade.update_cleanorder_detail_by_uctid(
             uctid, {'STFid': stfid})
         response['type'] = 'cleaner'
     else:
         # 其他 参数有误
         raise PARAMS_ERROR(u'订单参数有误')
     msg = u'更新成功' if updated else u'无此记录'
     return Success(msg, response)
Esempio n. 9
0
    def pay_for_service(self):
        data = parameter_required()
        if is_tourist():
            raise TOKEN_ERROR()
        if is_admin():
            raise AUTHORITY_ERROR(u'请使用普通用户登陆')
        usid = request.user.id
        user = self.suser.get_user_by_usid(usid)
        openid = user.WXopenid
        if 'umtid' in data:
            umtid = data.get('umtid')
            usermoverorder = self.strade.get_mover_order_by_umtid(umtid)
            if not usermoverorder or usermoverorder.UMTstatus != 0:
                raise NOT_FOUND()
            total_fee = usermoverorder.UMTpreviewprice
            out_trade_no = self.pay.nonce_str
            self.strade.update_movertrade_detail_by_umtid(
                umtid, {'sn': out_trade_no})
            body = u'邻家搬家'
            attach = u'mover'
        elif 'uctid' in data:
            uctid = data.get('uctid')
            user_clean_order = self.strade.get_clean_order_by_uctid(uctid)
            if not user_clean_order or user_clean_order.UCTstatus != 0:
                raise NOT_FOUND()
            total_fee = user_clean_order.UCTprice
            out_trade_no = self.pay.nonce_str
            self.strade.update_cleanorder_detail_by_uctid(
                uctid, {'sn': out_trade_no})
            body = u'cleaner'
            attach = u'cleaner'

        elif 'uftid' in data:
            uftid = data.get('uftid')
            user_fixer_order = self.strade.get_fixer_order_by_uftid(uftid)
            if not user_fixer_order or user_fixer_order.UFTstatus != 0:
                raise NOT_FOUND()
            total_fee = user_fixer_order.UFTprice
            out_trade_no = self.pay.nonce_str
            self.strade.update_fixerorder_detail_by_uftid(
                uftid, {'sn': out_trade_no})
            body = u'fixer'
            attach = u'fixer'
        else:
            raise PARAMS_ERROR()
        try:
            total_fee *= 100
            raw = self.pay.jsapi(trade_type="JSAPI",
                                 openid=openid,
                                 body=body,
                                 out_trade_no=out_trade_no,
                                 total_fee=int(total_fee),
                                 attach=attach,
                                 spbill_create_ip=request.remote_addr)
            res = dict(raw)
            res['paySign'] = res.get('sign')
        except WeixinPayError as e:
            return SYSTEM_ERROR(e.message)
        return Success(res)
Esempio n. 10
0
    def agree_cancle_fixer_order(self):
        """管理员同意执行退款"""
        if not is_admin():
            return TOKEN_ERROR(u'请使用管理员登录')
        data = parameter_required(('uftid', ))
        agree = int(data.get('agree', 1))
        uftid = data.get('uftid')
        order = self.strade.get_fixer_order_by_uftid(uftid)
        if not order:
            raise NOT_FOUND(u'不存在的订单')
        if order.UFTstatus != 3:
            raise PARAMS_ERROR(u'当前状态为{}'.format(
                SERVER_STATUS.get(order.UFTstatus, u'其他')))
        if not order.sn or not order.paytime:
            raise NOT_FOUND(u'未付款的订单')
        # 拒绝退款:
        if agree == 0:
            status = 1
            msg = u'已拒绝退款'
        # 同意退款
        else:
            status = 4
            msg = u'已同意退款'
            usid = order.USid
            user = self.suser.get_user_by_usid(usid)
            openid = user.WXopenid
            out_trade_no = order.sn
            total_fee = int(order.UFTprice * 100)
            # 调用退款
            try:
                self.pay.refund(out_trade_no=out_trade_no,
                                total_fee=total_fee,
                                refund_fee=total_fee,
                                op_user_id=openid,
                                out_refund_no=out_trade_no,
                                spbill_create_ip=request.remote_addr)
            except WeixinPayError as e:
                raise PARAMS_ERROR(u'签名错误')

        # 修改服务状态为退款中
        updated = self.strade.update_fixerorder_detail_by_uftid(
            uftid, {'UFTstatus': status})
        return Success(msg, {'uftid': uftid})
Esempio n. 11
0
    def add_room_opencity(self):
        if not is_admin():
            raise TOKEN_ERROR(u'请使用管理员登录')
        data = parameter_required(('city_id', ))
        city_id = data.get('city_id')
        room_city = self.scity.is_room_open_city(city_id)
        if room_city:
            raise PARAMS_ERROR(u'重复添加')
        data['rcid'] = str(uuid.uuid4())
        added = self.scity.add_model('RoomCity', data)

        return Success(u'添加房源开放城市成功', {'city_id': city_id})
Esempio n. 12
0
 def update_complaint(self):
     if not is_admin():
         raise TOKEN_ERROR(u'请使用管理员登录')
     data = parameter_required(('usercomplaintid', 'status'))
     status = data.get('status')
     if str(status) not in ['1', '0']:
         raise PARAMS_ERROR(u'status参数不合法')
     comlain = self.strade.update_somplaint_by_complaintid(
         data.get('usercomplaintid'), {'UserComplaintstatus': status})
     if not comlain:
         raise NOT_FOUND(u'修改失败')
     return Success(u'修改成功', {'status': COMPLAIN_STATUS[status]})
Esempio n. 13
0
 def update_cleanerorder_price(self):
     if not is_admin():
         raise TOKEN_ERROR(u'请使用管理员登录')
     data = parameter_required(('uctid', 'price'))
     price = data.get('price')
     uctid = data.get('uctid')
     cleaner_order = self.strade.get_clean_order_by_uctid(uctid)
     if not cleaner_order:
         raise NOT_FOUND()
     if cleaner_order.UCTstatus != 0:
         raise PARAMS_ERROR(u'当前订单状态为{}, 只可以修改未付款的订单'.format(
             SERVER_STATUS.get(cleaner_order.UCTstatus)))
     updated = self.strade.update_cleanorder_detail_by_uctid(
         uctid, {"UCTprice": price})
     return Success(u'修改成功', {'uctid': uctid})
Esempio n. 14
0
 def update_fixorder_price(self):
     """修改维修价格"""
     if not is_admin():
         raise TOKEN_ERROR(u'请使用管理员登录')
     data = parameter_required(('uftid', 'price'), others='ignore')
     uftid = data.get('uftid')
     fix_order = self.strade.get_fixer_order_by_uftid(uftid)
     if not fix_order:
         raise NOT_FOUND()
     if fix_order.UFTstatus != 0:
         raise PARAMS_ERROR(u'当前订单状态为{}, 只可以修改未付款的订单'.format(
             SERVER_STATUS.get(fix_order.UFTstatus)))
     updated = self.strade.update_fixerorder_detail_by_uftid(
         uftid, {'UFTprice': data.get('price')})
     return Success(u'修改成功', {'uftid': uftid})
Esempio n. 15
0
 def update_moverorder_price(self):
     """更新订单价格"""
     if not is_admin():
         raise TOKEN_ERROR(u'请使用管理员登录')
     data = parameter_required(('umtid', 'price'))
     price = data.get('price')
     umtid = data.get('umtid')
     mover_order = self.strade.get_mover_order_by_umtid(umtid)
     if not mover_order:
         raise NOT_FOUND()
     if mover_order.UMTstatus != 0:
         raise PARAMS_ERROR(u'当前订单状态为{}, 只可以修改未付款的订单'.format(
             SERVER_STATUS.get(mover_order.UMTstatus)))
     updated = self.strade.update_movertrade_detail_by_umtid(
         umtid, {'UMTpreviewprice': price})
     return Success(u'修改成功', {'umtid': umtid})
Esempio n. 16
0
 def get_appointment_one(self):
     """获取单条订单"""
     if is_tourist():
         raise TOKEN_ERROR(u'请登录')
     data = parameter_required()
     if 'uctid' in data:
         uctid = data.get('uctid')
         order = self.strade.get_clean_order_by_uctid(uctid)
         if not order:
             raise NOT_FOUND(u'该订单不存在')
         order.UCTstatus = SERVER_STATUS.get(order.UCTstatus)
         sceid = order.SCEid
         cleaner_server = self.sserver.get_cleanerserver_by_sceid(sceid)
         order.fill('clener', 'type')
         order.fill(getattr(cleaner_server, 'SCMtitle', ''), 'name')
     elif 'uftid' in data:
         uftid = data.get('uftid')
         order = self.strade.get_fixer_order_by_uftid(uftid)
         if not order:
             raise NOT_FOUND(u'该订单不存在')
         order.UFTstatus = SERVER_STATUS.get(order.UFTstatus)
         order.fill('fixer', 'type')
         order.fill('邻家维修', 'name')
     elif 'umtid' in data:
         umtid = data.get('umtid')
         order = self.strade.get_mover_order_by_umtid(umtid)
         if not order:
             raise NOT_FOUND(u'该订单不存在')
         order.UMTstatus = SERVER_STATUS.get(order.UMTstatus)
         order.fill('mover', 'type')
         smsid = order.SMSid
         mover_server = self.sserver.get_mover_by_smsid(smsid)
         order.fill(getattr(mover_server, 'SMStitle', ''), 'name')
         order.fill('type', 'mover')
     else:
         return PARAMS_ERROR()
     if not is_admin():
         if request.user.id != order.USid:
             raise NOT_FOUND(u'它人订单')
     # 工作人员
     staff = {}
     stfid = order.STFid
     if stfid:
         staff = self.suser.get_staff_by_stfid(stfid).clean.add(
             'STFid', 'STFname')
     order.fill(staff, 'staff')
     return Success(u'获取订单成功', {'order': order})
Esempio n. 17
0
 def _allow_order_status(old, new):
     if old == 0:
         # 0: u'待支付', 1: u'等待服务', 2: u'服务完成', 3: u'申请退款', 4: u'退款中', 5: u'交易关闭'
         allow = [1]
     elif old == 1:
         allow = [2, 4]
     elif old == 2:
         allow = []
     elif old == 3:
         allow = [2, 4]
     elif old == 4:
         allow = [5]
     else:
         allow = [0, 1, 2, 3, 4, 5]
     if new not in allow:
         raise PARAMS_ERROR(u'状态不合理, 当前状态为: {} '
                            u''.format(SERVER_STATUS.get(old)))
Esempio n. 18
0
 def all_with_page(self, page=None, count=None):
     """
     计算总页数和总数
     :param page: 当前页码
     :param count: 页面大小
     :return: sqlalchemy对象列表
     """
     if not page and not count:
         return self.all()
     try:
         page = int(page)
         count = int(count)
     except TypeError as e:
         raise PARAMS_ERROR(u'分页参数错误')
     mount = self.count()
     page_count = math.ceil(float(mount) / count)
     request.page_count = page_count
     request.all_count = mount
     return self.offset((page - 1) * count).limit(count).all()
Esempio n. 19
0
    def add_admin(self):
        # 添加管理员, 默认添加0级别管理员
        if not is_hign_level_admin():
            raise TOKEN_ERROR(u'需要高级管理权限')
        required = ['adname', 'adusername', 'adpassword', 'admobiel', 'ademail']
        data = parameter_required(required)
        if self.suser.get_admin_by_adusername(data.get('adusername')):
            raise PARAMS_ERROR(u'用户名重复')

        validate_phone(data.get('admobiel'))
        validate_phone(data.get('adphone'))
        validate_arg('\w+@\w+\.\w+', data.get('ademail'), u'电子邮箱格式不正确')
        data['adlevel'] = 0 or data.get('adlevel')
        if data['adlevel'] >= request.user.level:
            raise AUTHORITY_ERROR()
        data['adid'] = str(uuid.uuid4())
        data['adpassword'] = generate_password_hash(data.get('adpassword'))
        self.suser.add_model('Admin', data)
        return Success(u'添加管理员成功', {
            'adid': data.get('adid')
        })
Esempio n. 20
0
 def update_bedroom(self):
     """更新卧室信息, 比如改为已租出, 或者价格之类"""
     if not is_admin():
         raise TOKEN_ERROR(u'请使用管理员登录')
     data = parameter_required(('bbrid', ))
     bbrid = data.pop('bbrid')
     bedroom = self.sroom.get_bedroom_by_bbrid(bbrid)
     if not bedroom:
         raise NOT_FOUND(u'此卧室不存在')
     roid = bedroom.ROid
     if 'bbrshowprice' in data:
         # 需要改为未租出的状态
         self.sroom.update_bedroom_by_bbrid(
             bbrid, {
                 'BBRshowprice': data.get('bbrshowprice'),
                 'BBRshowpriceunit': data.get('bbrshowpriceunit', 'month'),
                 'BBRstatus': 2
             })
         userbedroom = self.sroom.update_roomates_info_by_bbrid(
             bbrid, {'UBBRstatus': 1})  # 同时需要更新卧室住户的状态
         msg = u'改为未入住成功'
     elif 'usgender' in data:
         # 需要改为入住状态
         self.sroom.update_bedroom_by_bbrid(bbrid, {"BBRstatus": 5})
         # 同时需要添加入住信息, 修改以往的入住信息为已搬(如果有)
         self.sroom.update_roomates_info_by_bbrid(bbrid, {'UBBRstatus': 1})
         model_dict = dict(UBBRid=str(uuid.uuid4()),
                           BBRid=bbrid,
                           USgender=data.get('usgender'))
         mod = dict(UserBedroomBehindRoom=model_dict)
         self.sroom.add_models(mod)
         msg = u'改为已入住成功'
     else:
         raise PARAMS_ERROR(u'缺少必要的参数')
     cache.delete('room_detail::{}'.format(roid))
     return Success(msg, {'bbrid': bbrid})
Esempio n. 21
0
 def on_json_loading_failed(self, e):
     if current_app is not None and current_app.debug:
         raise PARAMS_ERROR('Failed to decode JSON object: {0}'.format(e))
     raise PARAMS_ERROR(u'参数异常')
Esempio n. 22
0
 def update_room(self):
     """更新房源信息"""
     if not is_admin():
         raise TOKEN_ERROR(u'请使用管理员登录')
     data = parameter_required(('roid', ))
     roid = data.get('roid')
     # 房源主体的参数
     # house信息
     # medias信息
     # tags
     # roomequi设备
     # 公寓信息
     house = data.pop('house', None)
     medias = data.pop('medias', [])
     tags = data.pop('tags', [])
     roomrequirment = data.pop('roomrequirment', None)
     room = self.sroom.get_room_by_roid(roid)
     if not room:
         raise NOT_FOUND(u'无此房源')
     room_data = {
         'ROname': data.get('roname'),
         'ROimage': data.get('roimage'),
         'ROareanum': data.get('roareanum'),
         'ROface': data.get('roface'),
         'ROarea': data.get('roarea'),
         'ROshowpriceunit': data.get('roshowpriceunit'),
         'ROrenttype': data.get('rorenttype'),
         'ROdecorationstyle': data.get('rodecorationstyle'),
         'ROshowprice': data.get('roshowprice'),
         'ROcitynum': data.get('rocitynum'),
         'ROsubwayaround': data.get('rosubwayaround'),
         'STFid': data.get('stfid')
     }
     room_data = {k: v for k, v in room_data.items() if v is not None}
     if not room_data:
         raise PARAMS_ERROR('修改room需要的参数缺失')
     room_updated = self.sroom.update_room_by_roid(roid, room_data)
     print('更新了room')
     if house:
         hoid = room.ROid
         houseinfo_required = ('hofloor', 'hototalfloor', 'hobedroomcount',
                               'hoparlorcount')
         parameter_required(houseinfo_required, datafrom=house)
         house_data = {
             'HOfloor': house.get('hofloor'),
             'HOtotalfloor': house.get('hototalfloor'),
             'HObedroomcount': house.get('hobedroomcount'),
             'HOparlorcount': house.get('hoparlorcount'),
         }
         house_updated = self.sroom.update_house_by_hoid(hoid, house_data)
     if medias:
         # 此处接受到的media数据是没有删除的和信添加的, 删除的将不会在传过来
         # 此处有点罗嗦, 只需删除原来的数据, 再重新添加即可
         deleted = self.sroom.delete_room_media_by_roid(roid)
         for new_media in medias:
             new_media['reid'] = str(uuid.uuid4())
             new_media['roid'] = roid
             self.sroom.add_model('RoomMedia', new_media)
             print('添加多媒体')
     if tags:
         # 删除原来的tag
         self.sroom.delete_tag_by_roid(roid)
         print('删除了原来的tag')
         mod = {}
         mod['RoomTag'] = []
         for tag in tags:
             tag['roid'] = roid
             tag['rtid'] = str(uuid.uuid4())
             mod['RoomTag'].append(tag)
         self.sroom.add_models(mod)
         print('添加tag')
     if roomrequirment:
         self.sroom.delete_room_equirment_by_roid(roid)
         print('删除了原来的设备')
         roomrequirment['roid'] = roid
         roomrequirment['reid'] = str(uuid.uuid4())
         self.sroom.add_model('RoomEquirment', roomrequirment)
         print('修改设备')
     if 'villegeid' in data:
         hoid = room.HOid
         # house = self.sroom.get_house_by_hoid(hoid)
         villege = self.sroom.get_villege_info_by_id(data.get('villegeid'))
         if not villege:
             raise PARAMS_ERROR(u'villege id有误')
         self.sroom.update_house_by_hoid(hoid,
                                         {'VIid': data.get('villegeid')})
     cache.delete('room_detail::{}'.format(roid))
     cache.delete("get_index_room_list_data")  # 删除缓存
     return Success(u'修改成功', {'roid': roid})