Exemplo n.º 1
0
    def post(self):
        """接收上传的excel文件

        上传的excel文件应该具有两列: order_no和tracking_no.
        根据order_no找到订单,然后更新tracking_no字段.
        更新成功以后修改订单状态: processing(处理中) -> shipped(已发货)
        并且发送通知邮件(event事件处理)
        """
        file = self.request.files['excel'][0]
        if not '.xls' in file['content_type'] and \
                not '.xlsx' in file['content_type']:
            return self.write_error(400, message='文件格式不合法,' '只支持excel文件')
        xls = Excel(file_contents=file['body'])
        try:
            dct_list = xls.rows_to_dicts(
                header_format=Excel._col_name_underscore_fmt)
            if not dct_list:
                raise KeyError
            for dct in dct_list:
                BusinessService.order_deliver_upload(
                    self.db,
                    self.get_secure_cookie('user_id'),
                    order_no=dct['order_no'],
                    tracking_no=dct['tracking_no'])
        except KeyError:
            self.write_error(400,
                             message='excel文件必须包含'
                             'order_no和tracking_no这两个列名')
        else:
            self.write("文件上传成功")
Exemplo n.º 2
0
 def test_get_object_list_show_order_count(self):
     EmailService.create(self.db, email="*****@*****.**")
     BusinessService.order_save(self.db,
                                email="*****@*****.**",
                                remote_ip='123')
     self.db_commit()
     object_list = EmailService.get_object_list(self.db, 1)
     self.assertEqual(object_list.items[0].order_count, 1)
Exemplo n.º 3
0
 def put(self):
     """这个接口用于修改订单状态"""
     data = json.loads(self.request.body)
     BusinessService.change_order_status(
         self.db,
         order_id=data['id'],
         status=data['status'],
         user_id=self.get_secure_cookie('user_id'))
Exemplo n.º 4
0
 def test_order_save(self):
     BusinessService.order_save(self.db,
                                total="19.99",
                                remote_ip='127.0.0.1',
                                email='*****@*****.**')
     order_obj = (self.db.query(OrderModel).filter(
         OrderModel.total == "19.99").one_or_none())
     self.assertTrue(order_obj.remote_ip == '127.0.0.1')
Exemplo n.º 5
0
    def test_order_status_change(self):
        BusinessService.order_save(self.db,
                                   total="19.99",
                                   email='*****@*****.**',
                                   remote_ip='127.0.0.1')
        BusinessService.change_order_status(self.db, order_id=1, status='paid')
        self.db_commit()

        order_obj = (self.db.query(OrderModel).filter(
            OrderModel.total == "19.99").one_or_none())
        self.assertTrue(order_obj.status.name == "paid")
Exemplo n.º 6
0
    def test_email_save(self):
        email = "*****@*****.**"
        remote_ip = "127.0.0.1"
        BusinessService.email_save(self.db, email=email, remote_ip=remote_ip)
        self.db_commit()

        email_obj = (self.db.query(EmailModel).filter(
            EmailModel.email == email).one_or_none())
        self.assertTrue(email_obj is not None)

        record_obj = (self.db.query(EmailLoginRecord).filter(
            EmailLoginRecord.remote_ip == remote_ip).one_or_none())
        self.assertTrue(record_obj is not None)
Exemplo n.º 7
0
    def test_order_executed(self):
        BusinessService.order_save(self.db,
                                   total="19.99",
                                   email='*****@*****.**',
                                   remote_ip='127.0.0.1')
        order_id = (self.db.query(
            OrderModel.id).filter(OrderModel.total == "19.99").scalar())
        BusinessService.order_executed(self.db, order_id, "t_id")
        self.db_commit()

        order_obj = (self.db.query(OrderModel).filter(
            OrderModel.total == "19.99").one_or_none())
        self.assertTrue(order_obj.transaction_id == "t_id")

        record_obj = (self.db.query(OrderOperationRecordModel).filter_by(
            order_id=order_obj.id).one_or_none())
        self.assertTrue(record_obj.new_status == OrderStatusEnum.paid)
        self.assertIn("transaction", record_obj.other_changes)
Exemplo n.º 8
0
    def test_code_process_success(self):
        obj = TrackingCodeModel(code='123')
        self.db.add(obj)
        self.db_commit()

        result = BusinessService.tracking_code_process(self.db,
                                                       tracking_code='123',
                                                       remote_ip='127.0.0.1')
        self.assertEqual(result, True)
        self.assertEqual(obj.clicks, 1)
Exemplo n.º 9
0
    def get(self):
        """接受订单筛选参数,返回一个excel文件
        
        另外,如果订单处于‘已支付’状态,再导出以后状态将会自动变为‘处理中’
        :param start_date: ‘起始日期’,格式为'YYYY-MM-DD'的字符串
        :param end_date: ‘结束日期’, 格式为'YYYY-MM-DD'的字符串
        :param status: ‘状态’, 订单状态
        :return: 
        """
        start_date = self.get_query_argument('start_date', '')
        end_date = self.get_query_argument('end_date', '')
        status = self.get_query_argument('status', '')
        if start_date:
            start_date = datetime.strptime(start_date, '%Y-%m-%d').date()
        if end_date:
            end_date = datetime.strptime(end_date, '%Y-%m-%d').date()

        object_list = BusinessService.order_data_export(
            self.db,
            start_date=start_date,
            end_date=end_date,
            status=status,
            user_id=self.get_secure_cookie('user_id'))
        header = [
            'fullname', 'address', 'zip-code', 'city', 'state/province',
            'country', 'phone', 'email', 'pstyle', 'order_no', 'num'
        ]
        data = [(obj.fullname(), obj.address, obj.zipcode, obj.city, obj.state,
                 obj.country, obj.phone, obj.email,
                 "color: {0} size: {1}".format('black', obj.size),
                 obj.order_no, obj.quantity) for obj in object_list]

        # 以excel格式导出
        self.set_header('Content-Type', 'application/x-xls')
        self.set_header('Content-Disposition',
                        'attachment; filename=export.xls')
        io_data = Excel.write_to_file(header, data)
        self.write(io_data)
Exemplo n.º 10
0
 def test_order_save_error(self):
     with self.assertRaisesRegex(Exception, r"invalid.*argument"):
         BusinessService.order_save(self.db,
                                    total_amount='a',
                                    email='*****@*****.**',
                                    remote_ip='127.0.0.1')
Exemplo n.º 11
0
 def test_code_process_fail_by_none(self):
     result = BusinessService.tracking_code_process(
         self.db, tracking_code='not exists', remote_ip='127.0.0.1')
     self.assertEqual(result, False)