Example #1
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)
Example #2
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})
Example #3
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})
Example #4
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})
Example #5
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})
Example #6
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)))
Example #7
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})
Example #8
0
 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)
Example #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)