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)
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 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})
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})
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})
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)))
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})
def get_appointment_list(self): """后台获取预约列表""" # 此处将改用for循环 todo if not is_admin(): raise TOKEN_ERROR(u'请使用管理员登录') data = parameter_required() data['page_num'] = int(data.get('page', 1)) data['page_size'] = int(data.get('count', 15)) usid = data.get('usid') status = data.get('status') data['status'] = status server_type = data.get('type') if server_type == 'mover': order_list = self.strade.get_mover_serverlist_by_usid(usid, data) for mover_order in order_list: mover_order.clean.add('UMTid', 'SMSid', 'UMTstarttime', 'UMTmoveoutaddr', 'UMTmoveinaddr', 'UMTphone', 'UMTspecialwish', 'UMTpreviewprice', 'UMTmoveinlocation', 'UMTmoveoutlocation', 'USid', 'UMTcreatetime') mover_order.fill( getattr(self.sserver.get_mover_by_smsid(mover_order.SMSid), 'SMStitle', u'未知'), 'name'), mover_order.fill('mover', 'type') mover_order.fill( SERVER_STATUS.get(mover_order.UMTstatus, u'其它'), 'umtstatus') setattr(mover_order, 'createtime', mover_order.UMTcreatetime) elif server_type == 'fixer': order_list = self.strade.get_fixer_serverlist_by_usid(usid, data) for fixer_order in order_list: setattr(fixer_order, 'createtime', fixer_order.UFTcreatetime) fixer_order.fill(u'邻家维修', 'name') setattr(fixer_order, 'UFTstatus', SERVER_STATUS.get(fixer_order.UFTstatus, u'其它')) fixer_order.fill(u'fixer', 'type') elif server_type == 'cleaner': order_list = self.strade.get_clean_serverlist_by_usid(usid, data) for clean_order in order_list: clean_order.fill( getattr( self.sserver.get_cleanerserver_by_sceid( clean_order.SCEid), 'SCMtitle', u'未知'), 'name') setattr(clean_order, 'UCTstatus', SERVER_STATUS.get(clean_order.UCTstatus)) setattr(clean_order, 'createtime', clean_order.UCTcreatetime) clean_order.fill('cleaner', 'type') else: mover_order_list = self.strade.get_mover_serverlist_by_usid( usid, {'status': status}) fixer_order_list = self.strade.get_fixer_serverlist_by_usid( usid, {'status': status}) cleaner_list = self.strade.get_clean_serverlist_by_usid( usid, {'status': status}) 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') mover_order.fill( getattr(self.sserver.get_mover_by_smsid(mover_order.SMSid), 'SMStitle', u'未知'), 'name'), mover_order.fill('mover', 'type') mover_order.fill(SERVER_STATUS.get(mover_order.UMTstatus), 'umtstatus') setattr(mover_order, 'createtime', mover_order.UMTcreatetime) for clean_order in cleaner_list: clean_order.fill( getattr( self.sserver.get_cleanerserver_by_sceid( clean_order.SCEid), 'SCMtitle', u'未知'), 'name') setattr(clean_order, 'UCTstatus', SERVER_STATUS.get(clean_order.UCTstatus)) setattr(clean_order, 'createtime', clean_order.UCTcreatetime) clean_order.fill('cleaner', 'type') # 维修 for fixer_order in fixer_order_list: setattr(fixer_order, 'createtime', fixer_order.UFTcreatetime) fixer_order.fill(u'邻家维修', 'name') setattr(fixer_order, 'UFTstatus', SERVER_STATUS.get(fixer_order.UFTstatus)) fixer_order.fill(u'fixer', 'type') # 员工id 姓名. # map(lambda x: setattr( x, 'staff', self.suser.get_staff_by_stfid(x.STFid)) if not x.STFid order_list) for order in order_list: stfid = order.STFid staff = {} if stfid: staff = self.suser.get_staff_by_stfid(stfid) if staff: staff = staff.clean.add('STFid', 'STFname') setattr(order, 'staff', staff) order.add('staff') order_list = sorted(order_list, key=lambda x: x.createtime, reverse=True) # request.page_count = math.ceil(float(len_order_list) / page_size) # request.all_count = len_order_list return Success(u'获取列表成功', order_list)
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)