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)
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'申请成功, 等待管家回电')
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})
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)
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)
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'投诉成功')
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})
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)
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)