ebanutsya
This commit is contained in:
1
app.py
1
app.py
@@ -27,6 +27,7 @@ blueprints = [
|
|||||||
(routes.orders_blueprint, '/orders'),
|
(routes.orders_blueprint, '/orders'),
|
||||||
(routes.barcode_blueprint, '/barcode'),
|
(routes.barcode_blueprint, '/barcode'),
|
||||||
(routes.printing_blueprint, '/printing'),
|
(routes.printing_blueprint, '/printing'),
|
||||||
|
(routes.assembly_blueprint, '/assembly'),
|
||||||
]
|
]
|
||||||
|
|
||||||
for blueprint, url_prefix in blueprints:
|
for blueprint, url_prefix in blueprints:
|
||||||
|
|||||||
47
assemblr.log
47
assemblr.log
@@ -40,3 +40,50 @@
|
|||||||
10-29 06:43 - assemblr - INFO - SiproClient successfully initialized
|
10-29 06:43 - assemblr - INFO - SiproClient successfully initialized
|
||||||
10-29 06:47 - assemblr - INFO - SiproClient successfully initialized
|
10-29 06:47 - assemblr - INFO - SiproClient successfully initialized
|
||||||
10-29 06:53 - assemblr - INFO - SiproClient successfully initialized
|
10-29 06:53 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 03:37 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 03:37 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 03:39 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 04:23 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 05:10 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 05:11 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 05:11 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 05:11 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 05:11 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 05:11 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 05:13 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 05:15 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 05:15 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 05:15 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 05:29 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 05:29 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 05:31 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 05:34 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 05:34 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 05:34 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 05:34 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 05:34 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 05:34 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 05:34 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 05:37 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 05:38 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 05:46 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 06:15 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 06:24 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 06:24 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 07:14 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 07:18 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 07:19 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 07:19 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
10-30 07:21 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
11-02 03:18 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
11-02 03:18 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
11-02 03:26 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
11-03 04:07 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
11-03 04:07 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
11-03 04:12 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
11-06 03:47 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
11-06 03:47 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
11-06 03:47 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
11-06 05:15 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
11-06 05:17 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
11-06 05:32 - assemblr - INFO - SiproClient successfully initialized
|
||||||
|
|||||||
10
database/enums.py
Normal file
10
database/enums.py
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
from enum import unique, IntEnum
|
||||||
|
|
||||||
|
|
||||||
|
@unique
|
||||||
|
class AssemblyState(IntEnum):
|
||||||
|
NOT_STARTED = 0,
|
||||||
|
ASSEMBLING_PRODUCTS = 1,
|
||||||
|
ALL_PRODUCTS_ASSEMBLED = 2,
|
||||||
|
CONFIRMED = 3,
|
||||||
|
ENDED = 4
|
||||||
@@ -17,14 +17,15 @@ class Assembly(db.Model):
|
|||||||
__tablename__ = 'assemblies'
|
__tablename__ = 'assemblies'
|
||||||
id = db.Column(db.Integer, primary_key=True, comment='ID сборки')
|
id = db.Column(db.Integer, primary_key=True, comment='ID сборки')
|
||||||
|
|
||||||
created_at = db.Column(db.DateTime, nullable=False, comment='Дата и время начала сборки')
|
created_at = db.Column(db.DateTime, nullable=True, comment='Дата и время начала сборки')
|
||||||
ended_at = db.Column(db.DateTime, nullable=True, comment='Дата и время конца сборки')
|
ended_at = db.Column(db.DateTime, nullable=True, comment='Дата и время конца сборки')
|
||||||
|
|
||||||
user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
|
user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
|
||||||
user = db.relationship('User', backref='assemblies')
|
user = db.relationship('User', backref='assemblies')
|
||||||
|
|
||||||
order_id = db.Column(db.Integer, nullable=False, comment='ID заказа в базе данных')
|
order_id = db.Column(db.Integer, nullable=False, comment='ID заказа в базе данных')
|
||||||
active = db.Column(db.Boolean, nullable=False, comment='Активная ли сборка')
|
is_active = db.Column(db.Boolean, nullable=False, comment='Активная ли сборка')
|
||||||
|
state = db.Column(db.Integer, nullable=False, comment='Состояние сборки')
|
||||||
|
|
||||||
|
|
||||||
class Barcode(db.Model):
|
class Barcode(db.Model):
|
||||||
|
|||||||
@@ -2,3 +2,4 @@ from routes.auth import auth_blueprint
|
|||||||
from routes.orders import orders_blueprint
|
from routes.orders import orders_blueprint
|
||||||
from routes.barcode import barcode_blueprint
|
from routes.barcode import barcode_blueprint
|
||||||
from routes.printing import printing_blueprint
|
from routes.printing import printing_blueprint
|
||||||
|
from routes.assembly import assembly_blueprint
|
||||||
|
|||||||
@@ -1,47 +1,155 @@
|
|||||||
import datetime
|
import datetime
|
||||||
|
import time
|
||||||
|
|
||||||
from flask import Blueprint, request, jsonify
|
from flask import Blueprint, request, jsonify
|
||||||
from flask_jwt_extended import get_jwt_identity
|
from flask_jwt_extended import get_jwt_identity
|
||||||
|
|
||||||
import database
|
import database
|
||||||
|
from database.enums import AssemblyState
|
||||||
from routes.utils import jwt_protect_blueprint
|
from routes.utils import jwt_protect_blueprint
|
||||||
|
import sipro.api.orders
|
||||||
|
|
||||||
assembly_blueprint = jwt_protect_blueprint(Blueprint('assembly', __name__))
|
assembly_blueprint = jwt_protect_blueprint(Blueprint('assembly', __name__))
|
||||||
|
|
||||||
|
|
||||||
@assembly_blueprint.post('/open')
|
@assembly_blueprint.post('/create')
|
||||||
def create_assembly():
|
def create_assembly():
|
||||||
data: dict = request.json
|
try:
|
||||||
order_id: int = data.get('orderId')
|
data: dict = request.json
|
||||||
user_id = get_jwt_identity()
|
order_id: int = data.get('orderId')
|
||||||
existing_assembly = database.Assembly.query.filter_by(order_id=order_id).first()
|
user_id = get_jwt_identity()
|
||||||
if existing_assembly:
|
existing_assembly = database.Assembly.query.filter_by(order_id=order_id).first()
|
||||||
|
if existing_assembly:
|
||||||
|
response = {
|
||||||
|
'ok': False,
|
||||||
|
'message': 'Сборка этого товара уже была запущена',
|
||||||
|
'assemblyId': existing_assembly.id,
|
||||||
|
'statusCode': 'ASSEMBLY_ALREADY_EXISTS'
|
||||||
|
}
|
||||||
|
return jsonify(response)
|
||||||
|
active_assembly = database.Assembly.query.filter(database.Assembly.user_id == user_id,
|
||||||
|
database.Assembly.is_active == True).first()
|
||||||
|
if active_assembly:
|
||||||
|
response = {
|
||||||
|
'ok': False,
|
||||||
|
'message': 'Вы не можете запустить сборку заказа, так как у вас уже есть активная сборка',
|
||||||
|
'assemblyId': active_assembly.id,
|
||||||
|
'statusCode': 'USER_ALREADY_HAS_ACTIVE_ASSEMBLY'
|
||||||
|
}
|
||||||
|
return jsonify(response)
|
||||||
|
assembly = database.Assembly(user_id=user_id,
|
||||||
|
order_id=order_id,
|
||||||
|
state=AssemblyState.NOT_STARTED,
|
||||||
|
created_at=datetime.datetime.now(),
|
||||||
|
is_active=True)
|
||||||
|
database.db.session.add(assembly)
|
||||||
|
database.db.session.commit()
|
||||||
response = {
|
response = {
|
||||||
'ok': False,
|
'ok': True,
|
||||||
'message': 'Сборка этого товара уже была запущена',
|
'message': 'Сборка успешно запущена!',
|
||||||
'assemblyId': existing_assembly.id,
|
'assemblyId': assembly.id,
|
||||||
'statusCode': 'ASSEMBLY_ALREADY_EXISTS'
|
'statusCode': 'CREATED'
|
||||||
}
|
}
|
||||||
return jsonify(response)
|
return jsonify(response)
|
||||||
active_assembly = database.Assembly.query.filter_by(user_id=user_id).first()
|
except Exception as e:
|
||||||
if active_assembly:
|
|
||||||
response = {
|
response = {
|
||||||
'ok': False,
|
'ok': False,
|
||||||
'message': 'Вы не можете запустить сборку заказа, так как у вас уже есть активная сборка',
|
'message': f'Неизвестная ошибка: {e}',
|
||||||
'assemblyId': active_assembly.id,
|
'assemblyId': -1,
|
||||||
'statusCode': 'USER_ALREADY_HAS_ACTIVE_ASSEMBLY'
|
'statusCode': 'INVALID_EXCEPTION'
|
||||||
}
|
}
|
||||||
return jsonify(response)
|
return jsonify(response)
|
||||||
assembly = database.Assembly(created_at=datetime.datetime.now(),
|
|
||||||
user_id=user_id,
|
|
||||||
order_id=order_id,
|
@assembly_blueprint.post('/close')
|
||||||
active=True)
|
def close_assembly():
|
||||||
database.db.session.add(assembly)
|
args = request.json
|
||||||
|
assembly_id = args.get('assemblyId')
|
||||||
|
if not assembly_id or (not isinstance(assembly_id, int)):
|
||||||
|
response = {
|
||||||
|
'ok': False,
|
||||||
|
'message': 'Неверно указан ID сборки'
|
||||||
|
}
|
||||||
|
return jsonify(response)
|
||||||
|
assembly = database.db.session.get(database.Assembly, assembly_id)
|
||||||
|
if not assembly:
|
||||||
|
response = {
|
||||||
|
'ok': False,
|
||||||
|
'message': 'Указанная сборка не найдена'
|
||||||
|
}
|
||||||
|
return jsonify(response)
|
||||||
|
assembly.is_active = False
|
||||||
|
assembly.ended_at = datetime.datetime.now()
|
||||||
database.db.session.commit()
|
database.db.session.commit()
|
||||||
|
order_id = assembly.order_id
|
||||||
|
return sipro.api.orders.close_order(order_id)
|
||||||
|
|
||||||
|
|
||||||
|
@assembly_blueprint.get('/hasActive')
|
||||||
|
def user_has_active_assembly():
|
||||||
|
user_id = get_jwt_identity()
|
||||||
|
assemblies_count = database.Assembly.query.filter(database.Assembly.user_id == user_id,
|
||||||
|
database.Assembly.is_active == True).count()
|
||||||
|
return jsonify(has=assemblies_count > 0)
|
||||||
|
|
||||||
|
|
||||||
|
@assembly_blueprint.get('/getActive')
|
||||||
|
def get_active_assembly():
|
||||||
|
user_id = get_jwt_identity()
|
||||||
|
assembly = database.Assembly.query.filter(database.Assembly.user_id == user_id,
|
||||||
|
database.Assembly.is_active == True).first()
|
||||||
response = {
|
response = {
|
||||||
'ok': True,
|
'databaseId': assembly.id,
|
||||||
'message': 'Сборка успешно запущена!',
|
'createdAt': str(assembly.created_at),
|
||||||
'assemblyId': assembly.id,
|
'endedAt': str(assembly.ended_at),
|
||||||
'statusCode': 'CREATED'
|
'orderId': assembly.order_id,
|
||||||
|
'isActive': assembly.is_active,
|
||||||
|
'state': assembly.state
|
||||||
}
|
}
|
||||||
return jsonify(response)
|
return jsonify(response)
|
||||||
|
|
||||||
|
|
||||||
|
@assembly_blueprint.post('/confirm')
|
||||||
|
def confirm_assembly():
|
||||||
|
user_id = get_jwt_identity()
|
||||||
|
args: dict = request.json
|
||||||
|
assembly_id = args.get('assemblyId')
|
||||||
|
if not assembly_id or (not isinstance(assembly_id, int)):
|
||||||
|
response = {
|
||||||
|
'ok': False,
|
||||||
|
'message': 'ID сборки указан неверно'
|
||||||
|
}
|
||||||
|
return jsonify(response)
|
||||||
|
assembly = database.db.session.get(database.Assembly, assembly_id)
|
||||||
|
if not assembly:
|
||||||
|
response = {
|
||||||
|
'ok': False,
|
||||||
|
'message': 'Неудалось найти указанную сборку'
|
||||||
|
}
|
||||||
|
return jsonify(response)
|
||||||
|
if assembly.user_id != user_id:
|
||||||
|
response = {
|
||||||
|
'ok': False,
|
||||||
|
'message': 'Вы не можете закрыть сборку чужого пользователя'
|
||||||
|
}
|
||||||
|
return jsonify(response)
|
||||||
|
order_id = assembly.order_id
|
||||||
|
return sipro.api.orders.ship_order(order_id)
|
||||||
|
|
||||||
|
|
||||||
|
@assembly_blueprint.post('/updateState')
|
||||||
|
def update_assembly_state():
|
||||||
|
try:
|
||||||
|
args = request.json
|
||||||
|
state = args.get('state')
|
||||||
|
assembly_id = args.get('assemblyId')
|
||||||
|
rows_to_update = [{
|
||||||
|
'id': assembly_id,
|
||||||
|
'state': state
|
||||||
|
}]
|
||||||
|
database.db.session.bulk_update_mappings(database.Assembly, rows_to_update)
|
||||||
|
database.db.session.commit()
|
||||||
|
return jsonify(ok=True)
|
||||||
|
except Exception as e:
|
||||||
|
print('Error while updating')
|
||||||
|
return jsonify(ok=False)
|
||||||
|
|||||||
@@ -10,8 +10,27 @@ def get_order(order_id: int):
|
|||||||
return jsonify(id=order_id)
|
return jsonify(id=order_id)
|
||||||
|
|
||||||
|
|
||||||
|
@orders_blueprint.get('/getOrders')
|
||||||
|
def get_orders():
|
||||||
|
args = request.args
|
||||||
|
order_by = args.get('orderBy')
|
||||||
|
desc = int(args.get('desc'))
|
||||||
|
page = int(args.get('page'))
|
||||||
|
shipment_date = args.get('shipmentDate')
|
||||||
|
status = args.get('status')
|
||||||
|
response = sipro.api.orders.get_orders(order_by, desc, page, shipment_date, status)
|
||||||
|
return jsonify(response)
|
||||||
|
|
||||||
|
|
||||||
@orders_blueprint.get('/getBySupplierProductId')
|
@orders_blueprint.get('/getBySupplierProductId')
|
||||||
def get_orders_by_supplier_product_id():
|
def get_orders_by_supplier_product_id():
|
||||||
args = request.args
|
args = request.args
|
||||||
supplier_product_id = args.get('supplierProductId')
|
supplier_product_id = args.get('supplierProductId')
|
||||||
return sipro.api.orders.get_orders_by_supplier_product_id(supplier_product_id)
|
return sipro.api.orders.get_orders_by_supplier_product_id(supplier_product_id)
|
||||||
|
|
||||||
|
|
||||||
|
@orders_blueprint.get('/getOrderById')
|
||||||
|
def get_order_by_id():
|
||||||
|
args = request.args
|
||||||
|
order_id = args.get('orderId')
|
||||||
|
return sipro.api.orders.get_order_by_id(order_id)
|
||||||
|
|||||||
@@ -8,3 +8,29 @@ def get_orders_by_supplier_product_id(supplier_product_id: str) -> list[dict]:
|
|||||||
method = f'{router}/getBySupplierProductId?supplierProductId={supplier_product_id}'
|
method = f'{router}/getBySupplierProductId?supplierProductId={supplier_product_id}'
|
||||||
response = client.method('GET', method)
|
response = client.method('GET', method)
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
|
def get_order_by_id(order_id) -> dict:
|
||||||
|
method = f'{router}/getOrderById?orderId={order_id}'
|
||||||
|
response = client.method('GET', method)
|
||||||
|
return response
|
||||||
|
|
||||||
|
|
||||||
|
def ship_order(order_id: int) -> dict:
|
||||||
|
method = f'{router}/shipOrder'
|
||||||
|
data = {'orderId': order_id}
|
||||||
|
response = client.method('POST', method, data=data)
|
||||||
|
return response
|
||||||
|
|
||||||
|
|
||||||
|
def close_order(order_id: int) -> dict:
|
||||||
|
method = f'{router}/closeOrder'
|
||||||
|
data = {'orderId': order_id}
|
||||||
|
response = client.method('POST', method, data=data)
|
||||||
|
return response
|
||||||
|
|
||||||
|
|
||||||
|
def get_orders(order_by: str, desc: int, page: int, shipment_date: str, status: str):
|
||||||
|
method = f'{router}/getOrders?orderBy={order_by}&desc={desc}&page={page}&shipmentDate={shipment_date}&status={status}'
|
||||||
|
response = client.method('GET', method)
|
||||||
|
return response
|
||||||
|
|||||||
Reference in New Issue
Block a user