You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

132 lines
4.8 KiB

"""
{{ table.comment }} Service - 对齐JAVA Service
@author: {{ author }}
@date: {{ date }}
"""
from sqlalchemy.orm import Session
from sqlalchemy import and_
from typing import List, Optional, Tuple
from datetime import datetime
from app.models.{{ table.name_lower }} import {{ table.entity }}Model
from app.schemas.{{ table.name_lower }} import {{ table.entity }}
class {{ table.entity }}Service:
"""{{ table.comment }} Service Class - 对齐JAVA Service"""
@staticmethod
def get_by_id(db: Session, id: int) -> Optional[{{ table.entity }}Model]:
"""根据ID查询{{ table.comment }}"""
return db.query({{ table.entity }}Model).filter(
and_({{ table.entity }}Model.id == id, {{ table.entity }}Model.is_deleted == False)
).first()
@staticmethod
def info(db: Session, param: {{ table.entity }}) -> Optional[{{ table.entity }}Model]:
"""{{ table.comment }}详情 - 对齐JAVA: info({{ table.entity }} param)"""
query = db.query({{ table.entity }}Model).filter({{ table.entity }}Model.is_deleted == False)
if param.id is not None:
query = query.filter({{ table.entity }}Model.id == param.id)
{% for field in fields %}
{% if field.searchable %}
if param.{{ field.name }} is not None:
query = query.filter({{ table.entity }}Model.{{ field.name }} == param.{{ field.name }})
{% endif %}
{% endfor %}
return query.first()
@staticmethod
def get_list(
db: Session,
param: {{ table.entity }},
page: int = 1,
page_size: int = 10
) -> Tuple[List[{{ table.entity }}Model], int]:
"""{{ table.comment }}分页列表 - 对齐JAVA: page({{ table.entity }} param)"""
query = db.query({{ table.entity }}Model).filter({{ table.entity }}Model.is_deleted == False)
# 根据参数条件过滤 - 对齐JAVA MPJLambdaWrapper条件查询
{% for field in fields %}
{% if field.searchable %}
if param.{{ field.name }} is not None:
query = query.filter({{ table.entity }}Model.{{ field.name }} == param.{{ field.name }})
{% endif %}
{% endfor %}
total = query.count()
items = query.offset((page - 1) * page_size).limit(page_size).all()
return items, total
@staticmethod
def list(db: Session, param: {{ table.entity }}) -> List[{{ table.entity }}Model]:
"""{{ table.comment }}列表 - 对齐JAVA: list({{ table.entity }} param)"""
query = db.query({{ table.entity }}Model).filter({{ table.entity }}Model.is_deleted == False)
{% for field in fields %}
{% if field.searchable %}
if param.{{ field.name }} is not None:
query = query.filter({{ table.entity }}Model.{{ field.name }} == param.{{ field.name }})
{% endif %}
{% endfor %}
return query.all()
@staticmethod
def add(db: Session, param: {{ table.entity }}) -> None:
"""{{ table.comment }}新增 - 对齐JAVA: add({{ table.entity }} param)"""
db_obj = {{ table.entity }}Model(
{% for field in fields %}
{{ field.name }}=param.{{ field.name }},
{% endfor %}
created_by=param.user_id,
created_at=datetime.now()
)
db.add(db_obj)
db.commit()
db.refresh(db_obj)
@staticmethod
def modify(db: Session, param: {{ table.entity }}) -> None:
"""{{ table.comment }}修改 - 对齐JAVA: modify({{ table.entity }} param)"""
db_obj = db.query({{ table.entity }}Model).filter(
and_({{ table.entity }}Model.id == param.id, {{ table.entity }}Model.is_deleted == False)
).first()
if db_obj is None:
return
# 更新非空字段
{% for field in fields %}
if param.{{ field.name }} is not None:
db_obj.{{ field.name }} = param.{{ field.name }}
{% endfor %}
db_obj.updated_by = param.user_id
db_obj.updated_at = datetime.now()
db.commit()
@staticmethod
def remove(db: Session, id: int) -> None:
"""{{ table.comment }}删除(单个条目) - 对齐JAVA: remove(Integer id)"""
db_obj = db.query({{ table.entity }}Model).filter(
and_({{ table.entity }}Model.id == id, {{ table.entity }}Model.is_deleted == False)
).first()
if db_obj:
db_obj.is_deleted = True
db_obj.updated_at = datetime.now()
db.commit()
@staticmethod
def removes(db: Session, ids: List[int]) -> None:
"""{{ table.comment }}删除(多个条目) - 对齐JAVA: removes(List<Integer> ids)"""
db.query({{ table.entity }}Model).filter(
and_({{ table.entity }}Model.id.in_(ids), {{ table.entity }}Model.is_deleted == False)
).update({
{{ table.entity }}Model.is_deleted: True,
{{ table.entity }}Model.updated_at: datetime.now()
}, synchronize_session=False)
db.commit()