Ejemplo n.º 1
0
 def cleaner_appiontment(self):
     """清洁服务预约"""
     if is_admin():
         raise TOKEN_ERROR(u'普通用户才可以预约')
     if is_tourist():
         raise TOKEN_ERROR(u'请登录后预约')
     required = ('sceid', 'uctpreviewstarttime', 'uctaddr',
                 'uctpreviewlastingtime', 'uctphone', 'uctprice',
                 'uctlocation')
     data = parameter_required(required, others='ignore')
     cleaner_exists = self.sserver.get_cleanerserver_by_sceid(
         data.get('sceid'))
     if not cleaner_exists:
         raise NOT_FOUND(u'不存在的清洁服务')
     data['uctphone'] = data.get('uctphone').strip()
     validate_phone(data.get('uctphone'))
     self._allow_starttime(data.get('uctpreviewstarttime'))
     data['uctid'] = str(uuid.uuid4())
     data['usid'] = request.user.id
     data['UCTcreatetime'] = datetime.strftime(datetime.now(),
                                               format_for_db)
     uctlocation = data.get('uctlocation')
     data['Citynum'] = BdMap(uctlocation).city_id  # 获取城市id
     modelbean_dict = self.sserver.add_model(
         'UserCleanTrade', data, ['UCTpreviewstarttime', 'UCTid'])
     modelbean_dict['name'] = cleaner_exists.SCMtitle
     return Success(u'预约成功', modelbean_dict)
Ejemplo n.º 2
0
 def add_providehouse_apply(self):
     """申请提交房源"""
     if is_admin():
         return TOKEN_ERROR(u'普通用户才可以申请')
     if is_tourist():
         return TOKEN_ERROR(u'请登录后申请')
     data = parameter_required(
         ('phacity', 'phavillege', 'phaphone', 'phaname'), others='ignore')
     validate_phone(data.get('phaphone'))
     usid = request.user.id
     already_apply = self.strade.get_provide_appy_by_usid_village(
         usid, data.get('phavillege'))
     if already_apply:
         last_applytime = datetime.strptime(already_apply.PHAcreatetime,
                                            format_for_db)
         seconds = (datetime.now() - last_applytime).total_seconds()
         if seconds < 600:
             # 短时间内重复提交不记录
             return Success(u'申请成功, 等待管家回电')
     data['usid'] = usid
     data['PHAcreatetime'] = datetime.strftime(datetime.now(),
                                               format_for_db)
     data['PHAid'] = str(uuid.uuid4())
     self.strade.add_model('ProvideHouseApply', data)
     return Success(u'申请成功, 等待管家回电')
Ejemplo n.º 3
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})
Ejemplo n.º 4
0
 def mover_appointment(self):
     """搬家预约"""
     if is_admin():
         return TOKEN_ERROR(u'普通用户才可以预约')
     if is_tourist():
         return TOKEN_ERROR(u'请登录后预约')
     required = ('smsid', 'umtstarttime', 'umtmoveoutaddr', 'umtmoveinaddr',
                 'umtmoveoutlocation', 'umtmoveinlocation', 'umtphone',
                 'umtpreviewprice')
     data = parameter_required(required, others='allow')
     # 是否存在这个服务
     mover_exsits = self.sserver.get_mover_by_smsid(data.get('smsid'))
     if not mover_exsits:
         raise NOT_FOUND(u'不存在服务{}'.format(data.get('smsid')))
     data['umtphone'] = data['umtphone'].strip()
     validate_phone(data.get('umtphone'))
     self._allow_starttime(data.get('umtstarttime'))
     data['UMTid'] = str(uuid.uuid4())
     data['usid'] = request.user.id
     data['UMTcreatetime'] = datetime.strftime(datetime.now(),
                                               format_for_db)
     umtmoveoutlocation = data.get('umtmoveoutlocation')
     data['Citynum'] = BdMap(umtmoveoutlocation).city_id
     model_bean_dict = self.strade.add_model('UserMoveTrade', data,
                                             ['UMTstarttime', 'UMTid'])
     model_bean_dict['name'] = mover_exsits.SMStitle
     return Success(u'预约成功', model_bean_dict)
Ejemplo n.º 5
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)
Ejemplo n.º 6
0
 def add_complaint(self):
     if is_admin():
         raise TOKEN_ERROR(u'只有普通用户才可是投诉')
     if is_tourist():
         raise TOKEN_ERROR(u'请登录后投诉')
     data = parameter_required(('usercomplainttext', 'usercomplaintaddress',
                                'usercomplaintphone'),
                               others='ignore')
     validate_phone(data.get('usercomplaintphone'))
     data['usid'] = request.user.id
     data['UserComplaintid'] = str(uuid.uuid4())
     data['UserComplaintcreatetime'] = datetime.strftime(
         datetime.now(), format_for_db)
     self.strade.add_model('UserComplaint', data)
     return Success(u'投诉成功')
Ejemplo n.º 7
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})
Ejemplo n.º 8
0
 def fixer_appiontment(self):
     """维修预约"""
     if is_admin():
         return TOKEN_ERROR(u'只有普通用户才可以预约')
     if is_tourist():
         return TOKEN_ERROR(u'请登录后预约')
     required = ('uftaddr', 'uftstarttime', 'uftphone', 'uftlocation')
     forbidden = ('usid', 'uftstatus')
     data = parameter_required(required, forbidden=forbidden)
     data['uftphone'] = data.get('uftphone').strip()
     validate_phone(data.get('uftphone'))
     self._allow_starttime(data.get('uftstarttime'))
     data['UFTid'] = str(uuid.uuid4())
     data['usid'] = request.user.id
     data['UFTcreatetime'] = datetime.strftime(datetime.now(),
                                               format_for_db)
     uftlocation = data.get('uftlocation')
     data['Citynum'] = BdMap(uftlocation).city_id  # 获取城市id
     model_bean_dict = self.sserver.add_model('UserFixerTrade', data,
                                              ['UFTid', 'UFTstarttime'])
     model_bean_dict['name'] = u'维修预约'
     return Success(u'预约成功', model_bean_dict)
Ejemplo n.º 9
0
 def get_my_oppintment(self):
     """获得我的预约搬家, 维修, 清洁 type=mover, fixer, cleaner"""
     if is_admin():
         return TOKEN_ERROR(u'普通用户查看')
     if is_tourist():
         return TOKEN_ERROR(u'请登录后查看')
     data = parameter_required()
     data['page_num'] = int(data.get('page', 1))
     data['page_size'] = int(data.get('count', 15))
     usid = request.user.id
     server_type = data.get('type')
     if server_type == 'mover':
         order_list = self.strade.get_mover_serverlist_by_usid(usid, data)
         map(
             lambda x: x.clean.
             add('UMTid', 'SMSid', 'UMTstarttime', 'UMTmoveoutaddr',
                 'UMTmoveinaddr', 'UMTphone', 'UMTspecialwish',
                 'UMTpreviewprice', 'UMTmoveinlocation',
                 'UMTmoveoutlocation', 'USid', 'UMTcreatetime', 'Citynum'),
             order_list)
         map(lambda x: x.fill(SERVER_STATUS.get(x.UMTstatus), 'umtstatus'),
             order_list)
         map(
             lambda x: x.fill(
                 self.sserver.get_mover_by_smsid(x.SMSid).SMStitle, 'name'),
             order_list)
         map(lambda x: x.fill('mover', 'type'), order_list)
     elif server_type == 'fixer':
         order_list = self.strade.get_fixer_serverlist_by_usid(usid, data)
         map(
             lambda x: setattr(x, 'UFTstatus', SERVER_STATUS.get(
                 x.UFTstatus)), order_list)
         map(lambda x: x.fill(u'fixer', 'type'), order_list)
     elif server_type == 'cleaner':
         order_list = self.strade.get_clean_serverlist_by_usid(usid, data)
         map(
             lambda x: setattr(x, 'UCTstatus', SERVER_STATUS.get(
                 x.UCTstatus)), order_list)
         map(
             lambda x: x.fill(
                 self.sserver.get_cleanerserver_by_sceid(x.SCEid).SCMtitle,
                 'name'), order_list)
         map(lambda x: x.fill('cleaner', 'type'), order_list)
     else:
         mover_order_list = self.strade.get_mover_serverlist_by_usid(
             usid, data)
         fixer_order_list = self.strade.get_fixer_serverlist_by_usid(
             usid, data)
         cleaner_list = self.strade.get_clean_serverlist_by_usid(usid, data)
         order_list = mover_order_list + fixer_order_list + cleaner_list
         len_order_list = len(order_list)
         page_size = data['page_size']
         start = (data['page_num'] - 1) * data['page_size']
         end = start + page_size
         if end > len_order_list:
             end = len_order_list
         if start > end:
             start = end
         order_list = order_list[start:end]
         # 搬家
         for mover_order in mover_order_list:
             mover_order.clean.add('UMTid', 'SMSid', 'UMTstarttime',
                                   'UMTmoveoutaddr', 'UMTmoveinaddr',
                                   'UMTphone', 'UMTspecialwish',
                                   'UMTpreviewprice', 'UMTmoveinlocation',
                                   'UMTmoveoutlocation', 'USid',
                                   'UMTcreatetime', 'Citynum')
             mover_order.fill(
                 getattr(self.sserver.get_mover_by_smsid(mover_order.SMSid),
                         'SMStitle', u'未知'), 'name')
             mover_order.fill(SERVER_STATUS.get(mover_order.UMTstatus),
                              'umtstatus')
             setattr(mover_order, 'createtime', mover_order.UMTcreatetime)
             mover_order.fill('mover', 'type')
             # map(lambda x: x.fill(getattr(self.sserver.get_mover_by_smsid(x.SMSid), 'SMStitle', u'未知'), 'name'),
             #     mover_order_list)
             # map(lambda x: x.fill('mover', 'type'), mover_order_list)
             # map(lambda x: x.fill(SERVER_STATUS.get(x.UMTstatus), 'umtstatus'), mover_order_list)
             # map(lambda x: setattr(x, 'createtime', x.UMTcreatetime), mover_order_list)
         # 清洁
         for cleaner_order in cleaner_list:
             cleaner_order.fill(
                 getattr(
                     self.sserver.get_cleanerserver_by_sceid(
                         cleaner_order.SCEid), 'SCMtitle', u'未知'), 'name')
             setattr(cleaner_order, 'UCTstatus',
                     SERVER_STATUS.get(cleaner_order.UCTstatus))
             setattr(cleaner_order, 'createtime',
                     cleaner_order.UCTcreatetime)
             cleaner_order.fill('cleaner', 'type')
         # map(lambda x: x.fill(getattr(self.sserver.get_cleanerserver_by_sceid(x.SCEid), 'SCMtitle', u'未知'), 'name'),
         #     cleaner_list)
         # map(lambda x: setattr(x, 'UCTstatus', SERVER_STATUS.get(x.UCTstatus)), cleaner_list)
         # map(lambda x: setattr(x, 'createtime', x.UCTcreatetime), cleaner_list)
         # map(lambda x: x.fill('cleaner', 'type'), cleaner_list)
         # 维修
         for fix_order in fixer_order_list:
             x = fix_order
             setattr(fix_order, 'createtime', fix_order.UFTcreatetime)
             fix_order.fill(u'邻家维修', 'name')
             setattr(x, 'UFTstatus', SERVER_STATUS.get(x.UFTstatus))
             x.fill(u'fixer', 'type')
             # map(lambda x: setattr(x, 'createtime', x.UFTcreatetime), fixer_order_list)
             # map(lambda x: x.fill(u'邻家维修', 'name'), fixer_order_list)
             # map(lambda x: setattr(x, 'UFTstatus', SERVER_STATUS.get(x.UFTstatus)), fixer_order_list)
             # map(lambda x: x.fill(u'fixer', 'type'), fixer_order_list)
         order_list = sorted(order_list, key=lambda x: x.createtime)
         request.page_count = math.ceil(float(len_order_list) / page_size)
         request.all_count = len_order_list
         order_list = sorted(order_list, key=lambda x: x.createtime)
     for order in order_list:
         stfid = order.STFid
         staff = {}
         if stfid:
             staff = self.suser.get_staff_by_stfid(stfid).clean.add(
                 'STFid', 'STFname')
         setattr(order, 'staff', staff)
         order.add('staff')
     return Success(u'获取列表成功', order_list)