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("文件上传成功")
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)
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'))
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')
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")
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)
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)
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)
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)
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')
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)