Browse Source

审批流程问题修复

master
si@aidatagov.com 3 days ago
parent
commit
bdcb04c949
  1. 74
      vue-fastapi-backend/module_admin/dao/datastd_dao.py
  2. 10
      vue-fastapi-backend/module_admin/dao/metadata_config_dao.py
  3. 2
      vue-fastapi-backend/module_admin/service/approval_service.py
  4. 16
      vue-fastapi-backend/module_admin/service/datastd_service.py
  5. 46
      vue-fastapi-backend/module_admin/service/metadata_config_service.py
  6. 1
      vue-fastapi-frontend/src/views/metadataConfig/bizConfig/index.vue
  7. 1
      vue-fastapi-frontend/src/views/metadataConfig/bizPermiConfig/index.vue
  8. 1
      vue-fastapi-frontend/src/views/metadataConfig/clas/index.vue
  9. 1
      vue-fastapi-frontend/src/views/metadataConfig/taskBizConfig/index.vue
  10. 3
      vue-fastapi-frontend/src/views/system/flow/index.vue

74
vue-fastapi-backend/module_admin/dao/datastd_dao.py

@ -7,6 +7,7 @@ from utils.page_util import PageUtil
from sqlalchemy.orm import aliased
from module_admin.entity.vo.data_ast_content_vo import DataCatalogPageQueryModel, DeleteDataCatalogModel,DataCatalogChild
from datetime import datetime
from module_admin.entity.do.approval_do import FlowApproval, FlowConfig
class DataStdDao:
@ -1010,36 +1011,67 @@ class DataStdDao:
@classmethod
async def check_std_main_waiting(cls, oldInstId: str, db: AsyncSession):
filters = [
DataStdMainAppr.oldInstId == oldInstId,
or_(
DataStdMainAppr.approStatus == "waiting",
DataStdMainAppr.approStatus == "pending"
)
]
"""
检查 std_main_appr 的第一条记录是否存在待审批状态pending waiting
"""
# 1. 查询 DataStdMainAppr 中的所有记录(按时间倒序)
query = (
select(DataStdMainAppr)
.where(*filters)
.where(DataStdMainAppr.oldInstId == oldInstId)
.order_by(desc(DataStdMainAppr.create_time))
)
return await PageUtil.paginate(db, query, 0, 0, False)
@classmethod
async def check_std_dict_waiting(cls, oldInstId: str, db: AsyncSession):
filters = [
DataStdDictAppr.oldInstId == oldInstId,
or_(
DataStdDictAppr.approStatus == "waiting",
DataStdDictAppr.approStatus == "pending"
result = await db.execute(query)
first_record = result.scalars().first()
if not first_record:
return None # 或 raise 自定义异常,例如“未找到审批记录”
# 2. 获取 instid,去 FlowApproval 中查询是否存在 pending 或 waiting 状态
instid = first_record.flowId
approval_query = (
select(FlowApproval)
.where(
FlowApproval.businessId == instid,
FlowApproval.status.in_(["pending", "waiting"])
)
]
)
approval_result = await db.execute(approval_query)
approval = approval_result.scalars().first()
# 返回 FlowApproval 对象或布尔值
return approval # 或 return approval is not None
@classmethod
async def check_std_dict_waiting(cls, oldInstId: str, db: AsyncSession):
"""
检查 std_main_appr 的第一条记录是否存在待审批状态pending waiting
"""
# 1. 查询 DataStdDictAppr 中的所有记录(按时间倒序)
query = (
select(DataStdDictAppr)
.where(*filters)
.where(DataStdDictAppr.oldInstId == oldInstId)
.order_by(desc(DataStdDictAppr.create_time))
)
result = await db.execute(query)
first_record = result.scalars().first()
if not first_record:
return None # 或 raise 自定义异常,例如“未找到审批记录”
# 2. 获取 instid,去 FlowApproval 中查询是否存在 pending 或 waiting 状态
instid = first_record.flowId
approval_query = (
select(FlowApproval)
.where(
FlowApproval.businessId == instid,
FlowApproval.status.in_(["pending", "waiting"])
)
)
approval_result = await db.execute(approval_query)
approval = approval_result.scalars().first()
# 返回 FlowApproval 对象或布尔值
return approval # 或 return approval is not None
return await PageUtil.paginate(db, query, 0, 0, False)

10
vue-fastapi-backend/module_admin/dao/metadata_config_dao.py

@ -33,9 +33,19 @@ class MetadataConfigDao:
select(MetadataClas).where(
MetadataClas.clas_name == clas.clas_name if clas.clas_name else True,
MetadataClas.clas_eff_flag == clas.clas_eff_flag if clas.clas_eff_flag else True,
MetadataClas.clas_onum == clas.clas_onum if clas.clas_onum else True,
)
)
return result.scalars().first()
@classmethod
async def get_clas_by_onum(cls, db: AsyncSession, clas_onum: int):
"""
根据主键 clas_onum 获取分类信息
"""
result = await db.execute(
select(MetadataClas).where(MetadataClas.clas_onum == clas_onum)
)
return result.scalar_one_or_none()
@classmethod
async def get_metadata_clas_list(cls, db: AsyncSession, query_object, is_page: bool = False):

2
vue-fastapi-backend/module_admin/service/approval_service.py

@ -272,7 +272,7 @@ class ApprovalService:
@classmethod
async def cancel_apply_services(cls, query_db: AsyncSession, flow_id: str,
current_user: CurrentUserModel):
flow = await ApprovalDao.get_flow_by_idAndUser(flow_id, current_user.user.user_name)
flow = await ApprovalDao.get_flow_by_idAndUser(query_db,flow_id, current_user.user.user_name)
if flow is None:
raise ServiceException(message=f'所操作的流程不存在')
if flow.status == 'succeed' or flow.status == 'rejected':

16
vue-fastapi-backend/module_admin/service/datastd_service.py

@ -1253,8 +1253,8 @@ class DataStdService:
# 将 DataStdMainModel 转换为 DataStdMainApprModel,保留字段原始名
watingList=await DataStdDao.check_std_main_waiting(model.onum, query_db)
if len(watingList)>0 : # 如果 watingList 存在,意味着标准正在审批中
raise ServiceException(message="标准正在审批中,请等待审批完成")
if watingList : # 如果 watingList 存在,意味着标准正在审批中
raise ServiceException(message="数据标准正在审批中,请等待审批完成")
lastAppr =await DataStdDao.get_last_std_main_appr_by_id(query_db,model.onum)
if lastAppr is None:
lastAppr=DataStdDictApprModel()
@ -1280,8 +1280,8 @@ class DataStdService:
model.data_dict_stat="1"
watingList=await DataStdDao.check_std_dict_waiting(model.onum, query_db)
if len(watingList)>0 : # 如果 watingList 存在,意味着标准正在审批中
raise ServiceException(message="标准正在审批中,请等待审批完成")
if watingList : # 如果 watingList 存在,意味着标准正在审批中
raise ServiceException(message="数据字典正在审批中,请等待审批完成")
lastAppr =await DataStdDao.get_last_std_dict_appr_by_id(query_db,model.onum)
if lastAppr is None:
lastAppr=DataStdDictApprModel()
@ -1309,8 +1309,8 @@ class DataStdService:
col_info = await cls.get_std_main_by_id(query_db, col_id)
if col_info:
watingList=await DataStdDao.check_std_main_waiting(col_info.onum,query_db )
if len(watingList)>0 : # 如果 watingList 存在,意味着标准正在审批中
raise ServiceException(message="标准正在审批中,请等待审批完成")
if watingList : # 如果 watingList 存在,意味着标准正在审批中
raise ServiceException(message="数据标准正在审批中,请等待审批完成")
apprModel = DataStdMainApprModel(**col_info.model_dump(exclude_unset=True, by_alias=True))
apprModel.changeType="delete"
apprModel.onum=str(uuid.uuid4())
@ -1339,8 +1339,8 @@ class DataStdService:
col_info = await cls.get_std_dict_by_id_services(query_db, col_id)
if col_info:
watingList=await DataStdDao.check_std_dict_waiting(col_info.onum,query_db )
if len(watingList)>0 : # 如果 watingList 存在,意味着标准正在审批中
raise ServiceException(message="标准正在审批中,请等待审批完成")
if watingList : # 如果 watingList 存在,意味着标准正在审批中
raise ServiceException(message="数据字典正在审批中,请等待审批完成")
apprModel = DataStdDictApprModel(**col_info.model_dump(exclude_unset=True, by_alias=True))
apprModel.changeType="delete"
apprModel.onum=str(uuid.uuid4())

46
vue-fastapi-backend/module_admin/service/metadata_config_service.py

@ -43,36 +43,54 @@ class MetadataConfigService:
cls, query_db: AsyncSession, page_object: MetadataClasModel
):
"""
新增元数据分类
新增元数据分类 clas_onum 主键唯一性校验
"""
try:
# 校验 clas_onum 是否已存在
existing = await MetadataConfigDao.get_clas_by_onum(query_db, page_object.clas_onum)
if existing:
raise ServiceException(message=f"主键重复,clas_onum={page_object.clas_onum} 已存在")
await MetadataConfigDao.add_metadata_clas_dao(query_db, page_object)
await query_db.commit()
return CrudResponseModel(is_success=True, message="新增成功")
except Exception as e:
await query_db.rollback()
raise e
@classmethod
async def edit_metadata_clas_services(
cls, query_db: AsyncSession, page_object: MetadataClasModel
):
"""
编辑元数据分类
编辑元数据分类包含 clas_onum 唯一性校验如果主键被修改
"""
edit_data = page_object.model_dump(exclude_unset=True)
info = await cls.get_metadata_clas_detail_services(query_db, page_object.clas_onum)
if info.clas_onum:
try:
await MetadataConfigDao.edit_metadata_clas_dao(query_db, page_object.clas_onum, edit_data)
await query_db.commit()
return CrudResponseModel(is_success=True, message="更新成功")
except Exception as e:
await query_db.rollback()
raise e
else:
# 当前记录旧主键(假设表单传入)
original_onum = page_object.original_clas_onum # 你需要在 model 中加上这个字段
# 查询当前记录是否存在
existing = await cls.get_metadata_clas_detail_services(query_db, original_onum)
if not existing:
raise ServiceException(message="元数据标签不存在")
# 如果修改了 clas_onum,则校验唯一性
if page_object.clas_onum != original_onum:
duplicated = await MetadataConfigDao.get_clas_by_onum(query_db, page_object.clas_onum)
if duplicated:
raise ServiceException(message=f"clas_onum={page_object.clas_onum} 已存在,不能重复")
try:
await MetadataConfigDao.edit_metadata_clas_dao(query_db, original_onum, edit_data)
await query_db.commit()
return CrudResponseModel(is_success=True, message="更新成功")
except Exception as e:
await query_db.rollback()
raise e
@classmethod
async def delete_metadata_clas_services(
cls, query_db: AsyncSession, clas_ids: str

1
vue-fastapi-frontend/src/views/metadataConfig/bizConfig/index.vue

@ -350,7 +350,6 @@ function submitForm() {
open.value = false
getList()
} catch (error) {
ElMessage.error('操作失败,请重试')
}
})
}

1
vue-fastapi-frontend/src/views/metadataConfig/bizPermiConfig/index.vue

@ -331,7 +331,6 @@ function submitForm() {
open.value = false
getList()
} catch (error) {
ElMessage.error('操作失败,请重试')
}
})
}

1
vue-fastapi-frontend/src/views/metadataConfig/clas/index.vue

@ -249,7 +249,6 @@ function submitForm() {
open.value = false
getList()
} catch (error) {
ElMessage.error('操作失败,请重试')
}
})
}

1
vue-fastapi-frontend/src/views/metadataConfig/taskBizConfig/index.vue

@ -569,7 +569,6 @@ function submitForm() {
open.value = false
getList()
} catch {
ElMessage.error('操作失败,请重试')
}
})
}

3
vue-fastapi-frontend/src/views/system/flow/index.vue

@ -743,7 +743,8 @@ function getIconUrlAndShape(data,row){
}
function cancelFlow(row){
cancelMyFlow(row.id).then(res=>{
proxy.$modal.success("撤销成功");
proxy.$modal.msgSuccess("撤销成功");
getList()
})
}

Loading…
Cancel
Save