diff --git a/vue-fastapi-backend/module_admin/controller/datastd_controller.py b/vue-fastapi-backend/module_admin/controller/datastd_controller.py
index e7fb71c..921dc33 100644
--- a/vue-fastapi-backend/module_admin/controller/datastd_controller.py
+++ b/vue-fastapi-backend/module_admin/controller/datastd_controller.py
@@ -6,7 +6,7 @@ from config.get_db import get_db
from module_admin.entity.vo.user_vo import CurrentUserModel
from module_admin.annotation.log_annotation import Log
from module_admin.aspect.interface_auth import CheckUserInterfaceAuth
-from module_admin.entity.vo.datastd_vo import DataStdCodeModel, DataStdCodePageQueryModel, DeleteDataStdModel,DataStdDictModel,DataStdDictPageQueryModel,DataStdMainModel,DataStdMainPageQueryModel
+from module_admin.entity.vo.datastd_vo import DataStdCodeModel, DataStdCodePageQueryModel, DeleteDataStdModel,DataStdDictModel,DataStdDictPageQueryModel,DataStdMainModel,DataStdMainPageQueryModel,DataStdMainApprModel
from module_admin.service.datastd_service import DataStdService
from module_admin.service.login_service import LoginService
from utils.log_util import logger
@@ -393,6 +393,17 @@ async def get_std_main_list(
main_page_query_result = await DataStdService.get_std_main_list(query_db, main_page_query, is_page=True)
logger.info('获取数据标准列表成功')
return ResponseUtil.success(model_content=main_page_query_result)
+@datastdController.get(
+ '/stdmain/main/listappr', response_model=PageResponseModel, dependencies=[Depends(CheckUserInterfaceAuth('datastd:stdmain:main:list'))]
+)
+async def get_std_main_appr_list(
+ request: Request,
+ main_page_query: DataStdMainApprModel= Depends(DataStdMainApprModel),
+ query_db: AsyncSession = Depends(get_db),
+):
+ main_page_query_result = await DataStdService.get_std_main_appr_list(query_db, main_page_query, is_page=True)
+ logger.info('获取数据标准列表成功')
+ return ResponseUtil.success(data=main_page_query_result)
@datastdController.get(
'/stdmain/main/selectlist', response_model=PageResponseModel, dependencies=[Depends(CheckUserInterfaceAuth('datastd:stdmain:main:list'))]
)
@@ -413,6 +424,14 @@ async def query_detail_main(request: Request, id: str, query_db: AsyncSession =
logger.info(f'获取数据标准ID为{id}的信息成功')
return ResponseUtil.success(data=config_detail_result)
+@datastdController.get(
+ '/stdmain/mainappr/{id}', response_model=DataStdMainModel, dependencies=[Depends(CheckUserInterfaceAuth('datastd:stdmain:main:list'))]
+)
+async def query_detail_main_appr(request: Request, id: str, query_db: AsyncSession = Depends(get_db)):
+ config_detail_result = await DataStdService.get_std_main_change_by_id(query_db, id)
+ logger.info(f'获取数据标准ID为{id}的信息成功')
+
+ return ResponseUtil.success(data=config_detail_result)
@datastdController.post('/stdmain/main', dependencies=[Depends(CheckUserInterfaceAuth('datastd:stdmain:main:add'))])
@@ -431,6 +450,22 @@ async def add_std_main(
logger.info(add_std_main_result.message)
return ResponseUtil.success(msg=add_std_main_result.message)
+@datastdController.post('/stdmain/mainAppr', dependencies=[Depends(CheckUserInterfaceAuth('datastd:stdmain:main:add'))])
+@Log(title='数据标准', business_type=BusinessType.INSERT)
+async def add_std_main_appr(
+ request: Request,
+ add_std_main: DataStdMainModel,
+ query_db: AsyncSession = Depends(get_db),
+ current_user: CurrentUserModel = Depends(LoginService.get_current_user),
+):
+ add_std_main.create_by = current_user.user.user_name
+ add_std_main.create_time = datetime.now()
+ add_std_main.update_by = current_user.user.user_name
+ add_std_main.update_time = datetime.now()
+ add_std_main_result = await DataStdService.add_std_main_appr(query_db, add_std_main)
+ logger.info(add_std_main_result.message)
+ return ResponseUtil.success(msg=add_std_main_result.message)
+
@datastdController.put('/stdmain/main', dependencies=[Depends(CheckUserInterfaceAuth('datastd:stdmain:main:edit'))])
@Log(title='数据标准', business_type=BusinessType.UPDATE)
@@ -445,7 +480,19 @@ async def edit_std_main(
edit_std_main_result = await DataStdService.edit_std_main(query_db, edit_std_main)
logger.info(edit_std_main_result.message)
return ResponseUtil.success(msg=edit_std_main_result.message)
-
+@datastdController.put('/stdmain/mainAppr', dependencies=[Depends(CheckUserInterfaceAuth('datastd:stdmain:main:edit'))])
+@Log(title='数据标准', business_type=BusinessType.UPDATE)
+async def edit_std_main_appr(
+ request: Request,
+ edit_std_main: DataStdMainModel,
+ query_db: AsyncSession = Depends(get_db),
+ current_user: CurrentUserModel = Depends(LoginService.get_current_user),
+):
+ edit_std_main.update_by = current_user.user.user_name
+ edit_std_main.update_time = datetime.now()
+ edit_std_main_result = await DataStdService.edit_std_main_appr(query_db, edit_std_main)
+ logger.info(edit_std_main_result.message)
+ return ResponseUtil.success(msg=edit_std_main_result.message)
@datastdController.delete('/stdmain/main/{id}', dependencies=[Depends(CheckUserInterfaceAuth('datastd:stdmain:main:remove'))])
@Log(title='数据标准', business_type=BusinessType.DELETE)
@@ -457,6 +504,16 @@ async def delete_std_main(
delete_std_main_result = await DataStdService.delete_std_main(query_db, id)
logger.info(delete_std_main_result.message)
return ResponseUtil.success(msg=delete_std_main_result.message)
+@datastdController.delete('/stdmain/mainAppr/{id}', dependencies=[Depends(CheckUserInterfaceAuth('datastd:stdmain:main:remove'))])
+@Log(title='数据标准', business_type=BusinessType.DELETE)
+async def delete_std_main_Appr(
+ request: Request,
+ id: str,
+ query_db: AsyncSession = Depends(get_db),
+):
+ delete_std_main_result = await DataStdService.delete_std_main_Appr(query_db, id)
+ logger.info(delete_std_main_result.message)
+ return ResponseUtil.success(msg=delete_std_main_result.message)
@datastdController.put('/stdmain/mainonum', dependencies=[Depends(CheckUserInterfaceAuth('datastd:stdmain:main:remove'))])
@Log(title='数据标准', business_type=BusinessType.DELETE)
async def change_std_main_onum(
diff --git a/vue-fastapi-backend/module_admin/dao/datastd_dao.py b/vue-fastapi-backend/module_admin/dao/datastd_dao.py
index 758add3..8a26852 100644
--- a/vue-fastapi-backend/module_admin/dao/datastd_dao.py
+++ b/vue-fastapi-backend/module_admin/dao/datastd_dao.py
@@ -1,7 +1,7 @@
from sqlalchemy import delete, select, update, desc,or_,not_
from sqlalchemy.ext.asyncio import AsyncSession
-from module_admin.entity.do.datastd_do import DataStdCode,DataStdDict,DataAstContent,DataAstContentRela,DataStdMain
-from module_admin.entity.vo.datastd_vo import DataStdCodeModel,DataStdDictModel,DataStdMainModel
+from module_admin.entity.do.datastd_do import DataStdCode,DataStdDict,DataAstContent,DataAstContentRela,DataStdMain,DataStdMainAppr
+from module_admin.entity.vo.datastd_vo import DataStdCodeModel,DataStdDictModel,DataStdMainModel,DataStdMainApprModel
from module_admin.entity.do.dept_do import SysDept
from utils.page_util import PageUtil
from sqlalchemy.orm import aliased
@@ -705,14 +705,20 @@ class DataStdDao:
db.add(col)
await db.flush()
return col
-
+ @classmethod
+ async def add_std_main_appr(cls, db: AsyncSession, model: DataStdMainApprModel):
+ col = DataStdMainAppr(**model.model_dump())
+ db.add(col)
+ await db.flush()
+ return col
@classmethod
async def delete_std_main(cls, db: AsyncSession, Id: str):
await db.execute(delete(DataStdMain).where(DataStdMain.id == Id))
@classmethod
async def update_std_main(cls, db: AsyncSession, update_data: DataStdMainModel):
- await db.execute(update(DataStdMain), [update_data])
+ update_dict = update_data.model_dump(exclude_unset=True)
+ await db.execute(update(DataStdMain), [update_dict])
await db.flush()
@classmethod
@@ -734,4 +740,71 @@ class DataStdDao:
)
)
return col.scalars().first()
+ @classmethod
+ async def get_std_main_appr_list_all(cls, db: AsyncSession, query_object: DataStdMainApprModel):
+ filters = []
+
+ if query_object.std_name:
+ filters.append(DataStdMainAppr.std_name.like(f"%{query_object.std_name}%"))
+ if query_object.std_code:
+ filters.append(DataStdMainAppr.std_code.like(f"%{query_object.std_code}%"))
+ if query_object.sys_id:
+ filters.append(DataStdMainAppr.sys_id == query_object.sys_id)
+ if query_object.code_id:
+ filters.append(DataStdMainAppr.code_id == query_object.code_id)
+ if query_object.flowId:
+ filters.append(DataStdMainAppr.flowId == query_object.flowId)
+ if query_object.std_type:
+ filters.append(DataStdMainAppr.std_type == query_object.std_type)
+ if query_object.std_status:
+ filters.append(DataStdMainAppr.std_status == query_object.std_status)
+ query = select(DataStdMainAppr).where(*filters).order_by(desc(DataStdMainAppr.create_time))
+ return await PageUtil.paginate(db, query, 0, 0, False)
+
+ @classmethod
+ async def get_std_main_appr_list(cls, flowId:str,db: AsyncSession):
+ filters = []
+ filters.append(DataStdMainAppr.flowId == flowId)
+ query = select(DataStdMainAppr).where(*filters).order_by(desc(DataStdMainAppr.create_time))
+ return await PageUtil.paginate(db, query, 0, 0, False)
+ @classmethod
+ async def get_std_main_appr_by_id(cls, db: AsyncSession, Id: str):
+ col = await db.execute(select(DataStdMainAppr).where(DataStdMainAppr.id == Id))
+ return col.scalars().first()
+ @classmethod
+ async def get_last_std_main_appr_by_id(cls,db: AsyncSession, Id: str ):
+ result = await db.execute(
+ select(DataStdMainAppr)
+ .where(
+ DataStdMainAppr.oldInstId == Id,
+ DataStdMainAppr.approStatus == "succeed"
+ )
+ .order_by(DataStdMainAppr.update_time.desc())
+ .limit(1)
+ )
+ return result.scalar_one_or_none()
+
+ @classmethod
+ async def update_std_main_appr(cls, db: AsyncSession, update_data: DataStdMainApprModel):
+ update_dict = update_data.model_dump(exclude_unset=True)
+ await db.execute(update(DataStdMainAppr), [update_dict])
+ await db.flush()
+
+ @classmethod
+ async def check_std_main_waiting(cls, oldInstId: str, db: AsyncSession):
+ filters = [
+ DataStdMainAppr.oldInstId == oldInstId,
+ or_(
+ DataStdMainAppr.approStatus == "waiting",
+ DataStdMainAppr.approStatus == "pending"
+ )
+ ]
+
+ query = (
+ select(DataStdMainAppr)
+ .where(*filters)
+ .order_by(desc(DataStdMainAppr.create_time))
+ )
+
+ return await PageUtil.paginate(db, query, 0, 0, False)
\ No newline at end of file
diff --git a/vue-fastapi-backend/module_admin/entity/do/datastd_do.py b/vue-fastapi-backend/module_admin/entity/do/datastd_do.py
index 48ed6fd..373fcd6 100644
--- a/vue-fastapi-backend/module_admin/entity/do/datastd_do.py
+++ b/vue-fastapi-backend/module_admin/entity/do/datastd_do.py
@@ -114,4 +114,43 @@ class DataStdMain(Base):
tech_user = Column(String(20), default=None, comment='技术认责人员')
content_onum = Column(Integer, default=None, comment='分类')
std_src = Column(String(20), default=None, comment='标准来源')
- data_clas = Column(String(20), default=None, comment='数据类别')
\ No newline at end of file
+ data_clas = Column(String(20), default=None, comment='数据类别')
+
+
+class DataStdMainAppr(Base):
+ """
+ 数据标准表
+ """
+ __tablename__ = 't_datastd_main_appr'
+
+ id = Column(String(50), primary_key=True, comment='标准代码Id')
+ create_by = Column(String(20), default='', comment='创建者')
+ create_time = Column(DateTime, nullable=True, default=None, comment='创建时间')
+ update_by = Column(String(20), default='', comment='更新者')
+ update_time = Column(DateTime, nullable=True, default=None, comment='更新时间')
+ std_num = Column(String(50), default=None, comment='标准编号')
+ std_code = Column(String(50), default=None, comment='标准英文名')
+ std_name = Column(String(200), default=None, comment='标准中文名')
+ std_type = Column(String(1), default=None, comment='标准类型(0:基础数据 1:指标数据)')
+ securityLevel = Column(String(1), default=None, comment='安全等级')
+ sourceSystem = Column(String(50), default=None, comment='来源系统')
+ sys_name = Column(String(50), default=None, comment='归属系统')
+ sys_id = Column(Integer, default=None, comment='归属系统Id')
+ std_menu = Column(String(200), default=None, comment='标准业务定义')
+ code_num = Column(String(50), default=None, comment='代码编号')
+ code_id = Column(String(50), default=None, comment='代码id')
+ std_status = Column(String(1), default=None, comment='标准状态(1:有效 0:无效)')
+ buss_dept_id = Column(BigInteger, default=None, comment='业务认责部门')
+ tech_dept_id = Column(BigInteger, default=None, comment='技术认责部门')
+ buss_user = Column(String(20), default=None, comment='业务认责人员')
+ tech_user = Column(String(20), default=None, comment='技术认责人员')
+ content_onum = Column(Integer, default=None, comment='分类')
+ std_src = Column(String(20), default=None, comment='标准来源')
+ data_clas = Column(String(20), default=None, comment='数据类别')
+ changeType = Column(String(10), default=None, comment='变更类型')
+ flowId = Column(String(50), default=None, comment='审批Id')
+ approResult = Column(String(20), default=None, comment='审批结果')
+ oldInstId = Column(String(50), default=None, comment='原始正式id')
+ compareId = Column(String(50), default=None, comment='原始数据id(用于对比差异)')
+ approStatus = Column(String(10), default=None, comment='审批状态(waiting,申请中,pending审核中,succeed,rejected已审核,canceled已取消)')
+
\ No newline at end of file
diff --git a/vue-fastapi-backend/module_admin/entity/vo/datastd_vo.py b/vue-fastapi-backend/module_admin/entity/vo/datastd_vo.py
index 7f4c609..5f38f25 100644
--- a/vue-fastapi-backend/module_admin/entity/vo/datastd_vo.py
+++ b/vue-fastapi-backend/module_admin/entity/vo/datastd_vo.py
@@ -123,4 +123,11 @@ class DataStdMainPageQueryModel(DataStdMainModel):
元数据任务分页查询模型
"""
page_num: int = Field(default=1, description='当前页码')
- page_size: int = Field(default=10, description='每页记录数')
\ No newline at end of file
+ page_size: int = Field(default=10, description='每页记录数')
+class DataStdMainApprModel(DataStdMainModel):
+ changeType: Optional[str] = Field(default=None, description='变更类型')
+ flowId: Optional[str] = Field(default=None, description='审批Id')
+ approResult: Optional[str] = Field(default=None, description='审批结果')
+ oldInstId: Optional[str] = Field(default=None, description='原始正式id')
+ compareId: Optional[str] = Field(default=None, description='原始数据id(用于对比差异)')
+ approStatus: Optional[str] = Field(default=None, description='审批状态(waiting,申请中,pending审核中,succeed,rejected已审核,canceled已取消)')
\ No newline at end of file
diff --git a/vue-fastapi-backend/module_admin/service/approval_service.py b/vue-fastapi-backend/module_admin/service/approval_service.py
index 79a9800..58642dd 100644
--- a/vue-fastapi-backend/module_admin/service/approval_service.py
+++ b/vue-fastapi-backend/module_admin/service/approval_service.py
@@ -13,6 +13,8 @@ from utils.common_util import CamelCaseUtil
from module_admin.dao.approval_dao import ApprovalDao
from module_admin.dao.user_dao import UserDao
from module_admin.dao.meta_dao import MetaDao
+from module_admin.dao.datastd_dao import DataStdDao
+from module_admin.entity.vo.datastd_vo import DataStdCodeModel,DataStdDictModel,DataStdMainModel,DataStdMainApprModel
class ApprovalService:
@@ -89,6 +91,9 @@ class ApprovalService:
edit.approvalFlow = json.dumps(array)
if flow_approval.businessType == 'metaDataInfo':
await cls.syncSuppInfo(result_db, flow_approval.businessId, edit.status)
+ # 数据标准审批
+ elif flow_approval.businessType == 'dataStdMain':
+ await cls.syncStdMainInfo(result_db, flow_approval.businessId, edit.status)
await ApprovalDao.edit_flow_approval(result_db, edit.model_dump(exclude_unset=True))
await result_db.commit()
return CrudResponseModel(is_success=True, message='操作成功')
@@ -121,7 +126,39 @@ class ApprovalService:
else:
await MetaDao.updateMetadataSuppInfo(suppTable.onum, table, result_db)
return CrudResponseModel(is_success=True, message='操作成功')
+ @classmethod
+ async def syncStdMainInfo(cls, result_db: AsyncSession, suppId: str, operateType: str):
+ apprList = await DataStdDao.get_std_main_appr_list(suppId, result_db)
+
+ for appr in apprList:
+ # 将 SQLAlchemy 模型实例转换为 Pydantic 模型实例
+ appr_model = DataStdMainApprModel.model_validate(appr)
+
+ change_type = appr_model.changeType
+ if operateType =='succeed':
+ if change_type == "add":
+ # 将 DataStdMainApprModel 转换为 DataStdMainModel
+ main_model = DataStdMainModel(**appr_model.model_dump(exclude_unset=True, by_alias=True))
+ await DataStdDao.add_std_main(result_db, main_model)
+
+ elif change_type == "edit":
+ # 使用 oldInstId 作为主键
+ main_model = DataStdMainModel(**appr_model.model_dump(exclude_unset=True, by_alias=True))
+ main_model.id = appr_model.oldInstId
+ await DataStdDao.update_std_main(result_db, main_model)
+
+ elif change_type == "delete":
+ await DataStdDao.delete_std_main(result_db, appr_model.oldInstId)
+
+ # 更新 approStatus 状态
+ appr_model.approStatus = operateType
+ await DataStdDao.update_std_main_appr(result_db, appr_model)
+
+
+ return CrudResponseModel(is_success=True, message='操作成功')
+
+
@classmethod
async def get_flow_list_services(cls, query_db: AsyncSession, query_param: ApprovalQueryObject,
current_user: CurrentUserModel):
diff --git a/vue-fastapi-backend/module_admin/service/datastd_service.py b/vue-fastapi-backend/module_admin/service/datastd_service.py
index 10df044..eff8b07 100644
--- a/vue-fastapi-backend/module_admin/service/datastd_service.py
+++ b/vue-fastapi-backend/module_admin/service/datastd_service.py
@@ -3,9 +3,11 @@ from sqlalchemy.ext.asyncio import AsyncSession
from exceptions.exception import ServiceException
from module_admin.dao.datastd_dao import DataStdDao
from module_admin.entity.vo.common_vo import CrudResponseModel
-from module_admin.entity.vo.datastd_vo import DataStdCodeModel,DeleteDataStdModel,DataStdDictModel,DataStdMainModel
+from module_admin.entity.vo.datastd_vo import DataStdCodeModel,DeleteDataStdModel,DataStdDictModel,DataStdMainModel,DataStdMainApprModel
from utils.common_util import CamelCaseUtil
import uuid
+from module_admin.entity.vo.approval_vo import ApplyModel
+from module_admin.service.approval_service import ApprovalService
from collections import defaultdict
from datetime import datetime
from config.constant import CommonConstant
@@ -767,6 +769,9 @@ class DataStdService:
async def get_std_main_list(cls, query_db: AsyncSession, query_object: DataStdMainModel, is_page: bool = False):
return await DataStdDao.get_std_main_list(query_db, query_object, is_page)
@classmethod
+ async def get_std_main_appr_list(cls, query_db: AsyncSession, query_object: DataStdMainApprModel, is_page: bool = False):
+ return await DataStdDao.get_std_main_appr_list(query_object.flowId, query_db)
+ @classmethod
async def get_std_main_list_all(cls, query_db: AsyncSession, query_object: DataStdMainModel):
main_query_result= await DataStdDao.get_std_main_list_all(query_db, query_object)
return main_query_result
@@ -779,6 +784,41 @@ class DataStdService:
else:
return DataStdMainModel(**dict())
+
+ @classmethod
+ async def get_std_main_appr_by_id(cls, query_db: AsyncSession, id: str):
+ mainstd= await DataStdDao.get_std_main_appr_by_id(query_db, id)
+ if mainstd:
+ return DataStdMainModel(**CamelCaseUtil.transform_result(mainstd))
+
+ else:
+ return DataStdMainModel(**dict())
+ @classmethod
+ async def get_std_main_change_by_id(cls, query_db: AsyncSession, id: str):
+ mainstd= await DataStdDao.get_std_main_appr_by_id(query_db, id)
+ if mainstd:
+ if mainstd.changeType == "edit":
+ compareMainstd = await DataStdDao.get_std_main_appr_by_id(query_db, mainstd.compareId)
+
+ # 将对象转成 dict,驼峰转小写风格字段
+ new_data = CamelCaseUtil.transform_result(mainstd)
+ old_data = CamelCaseUtil.transform_result(compareMainstd) if compareMainstd else {}
+
+ result_dict = {}
+ for key, new_value in new_data.items():
+ old_value = old_data.get(key)
+
+ if new_value != old_value and old_value is not None:
+ # 有变化,拼接 "旧值 ==> 新值"
+ result_dict[key] = f"{old_value} ==> {new_value}"
+ else:
+ result_dict[key] = new_value
+
+ return result_dict # 返回 dict,不是 DataStdMainModel 实例
+ return DataStdMainModel(**CamelCaseUtil.transform_result(mainstd))
+
+ else:
+ return DataStdMainModel(**dict())
@classmethod
async def add_std_main(cls, query_db: AsyncSession, model: DataStdMainModel):
if not await cls.check_std_num_unique(query_db, model):
@@ -789,6 +829,7 @@ class DataStdService:
await DataStdDao.add_std_main(query_db, model)
return CrudResponseModel(is_success=True, message='新增标准成功')
+
@classmethod
async def edit_std_main(cls, query_db: AsyncSession, model: DataStdMainModel):
if not await cls.check_std_num_unique(query_db, model):
@@ -799,7 +840,82 @@ class DataStdService:
return CrudResponseModel(is_success=True, message='编辑标准成功')
else:
raise ServiceException(message=f'标准 {model.id} 不存在')
-
+ @classmethod
+ async def add_std_main_appr(cls, query_db: AsyncSession, model: DataStdMainModel):
+ if not await cls.check_std_num_unique(query_db, model):
+ raise ServiceException(message=f"标准编号 {model.std_num} 已存在")
+ model.id=str(uuid.uuid4())
+ model.std_status="9"
+ model.content_onum=2
+ # 将 DataStdMainModel 转换为 DataStdMainApprModel,保留字段原始名
+ apprModel = DataStdMainApprModel(**model.model_dump(exclude_unset=True, by_alias=True))
+ apprModel.changeType="add"
+ apprModel.compareId=model.id
+ apprModel.oldInstId=model.id
+ apprModel.approStatus="waiting"
+ apprModel.flowId=str(uuid.uuid4())
+ await DataStdDao.add_std_main_appr(query_db, apprModel)
+ applyModel = ApplyModel()
+ applyModel.businessType = "dataStdMain"
+ applyModel.businessId = apprModel.flowId
+ applyModel.applicant = apprModel.create_by
+ await ApprovalService.apply_services(query_db, applyModel, 'dataStdMain')
+ return CrudResponseModel(is_success=True, message='新增标准成功')
+ @classmethod
+ async def edit_std_main_appr(cls, query_db: AsyncSession, model: DataStdMainModel):
+ if not await cls.check_std_num_unique(query_db, model):
+ raise ServiceException(message=f"标准编号 {model.std_num} 已存在")
+ model.std_status="9"
+ # 将 DataStdMainModel 转换为 DataStdMainApprModel,保留字段原始名
+
+ watingList=await DataStdDao.check_std_main_waiting(model.id, query_db)
+ if len(watingList)>0 : # 如果 watingList 存在,意味着标准正在审批中
+ raise ServiceException(message="标准正在审批中,请等待审批完成")
+ lastAppr =await DataStdDao.get_last_std_main_appr_by_id(query_db,model.id)
+ apprModel = DataStdMainApprModel(**model.model_dump(exclude_unset=True, by_alias=True))
+ apprModel.changeType="edit"
+ apprModel.id=str(uuid.uuid4())
+ apprModel.oldInstId=model.id
+ apprModel.compareId=lastAppr.id
+ apprModel.approStatus="waiting"
+ apprModel.flowId=str(uuid.uuid4())
+ await DataStdDao.add_std_main_appr(query_db, apprModel)
+ applyModel = ApplyModel()
+ applyModel.businessType = "dataStdMain"
+ applyModel.businessId = apprModel.flowId
+ applyModel.applicant = apprModel.create_by
+ await ApprovalService.apply_services(query_db, applyModel, 'dataStdMain')
+ return CrudResponseModel(is_success=True, message='修改标准成功')
+ @classmethod
+ async def delete_std_main_Appr(cls, query_db: AsyncSession, ids: str):
+ if ids:
+ col_id_list = ids.split(',')
+ try:
+ for col_id in col_id_list:
+ 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.id,query_db )
+ if len(watingList)>0 : # 如果 watingList 存在,意味着标准正在审批中
+ raise ServiceException(message="标准正在审批中,请等待审批完成")
+ apprModel = DataStdMainApprModel(**col_info.model_dump(exclude_unset=True, by_alias=True))
+ apprModel.changeType="delete"
+ apprModel.id=str(uuid.uuid4())
+ apprModel.oldInstId=col_info.id
+ apprModel.approStatus="waiting"
+ apprModel.flowId=str(uuid.uuid4())
+ await DataStdDao.add_std_main_appr(query_db, apprModel)
+ applyModel = ApplyModel()
+ applyModel.businessType = "dataStdMain"
+ applyModel.businessId = apprModel.flowId
+ applyModel.applicant = apprModel.create_by
+ await ApprovalService.apply_services(query_db, applyModel, 'dataStdMain')
+ await query_db.commit()
+ return CrudResponseModel(is_success=True, message='提交删除标准审批成功')
+ except Exception as e:
+ await query_db.rollback()
+ raise e
+ else:
+ raise ServiceException(message='传入标准ID为空')
@classmethod
async def delete_std_main(cls, query_db: AsyncSession, ids: str):
if ids:
diff --git a/vue-fastapi-frontend/src/api/datastd/std.js b/vue-fastapi-frontend/src/api/datastd/std.js
index e5ccaa9..28c2e2d 100644
--- a/vue-fastapi-frontend/src/api/datastd/std.js
+++ b/vue-fastapi-frontend/src/api/datastd/std.js
@@ -189,6 +189,14 @@ export function listStdMain(query) {
params: query
})
}
+
+export function listStdMainAppr(query) {
+ return request({
+ url: '/default-api/datastd/stdmain/main/listappr',
+ method: 'get',
+ params: query
+ })
+}
// 查询数据标准列表
export function listStdMainSelect(query) {
return request({
@@ -207,12 +215,18 @@ export function getStdMain(colId) {
method: 'get'
})
}
-
+export function getStdMainAppr(colId) {
+ return request({
+ url: '/default-api/datastd/stdmain/mainappr/' + parseStrEmpty(colId),
+ method: 'get'
+ })
+}
// 新增数据标准
export function addStdMain(data) {
return request({
- url: '/default-api/datastd/stdmain/main',
+ url: '/default-api/datastd/stdmain/mainAppr',
+ // url: '/default-api/datastd/stdmain/mainAppr', 不带审批
method: 'post',
data: data
})
@@ -223,7 +237,7 @@ export function addStdMain(data) {
// 修改数据标准
export function updateStdMain(data) {
return request({
- url: '/default-api/datastd/stdmain/main',
+ url: '/default-api/datastd/stdmain/mainAppr',
method: 'put',
data: data
})
@@ -233,7 +247,7 @@ export function updateStdMain(data) {
// 删除数据标准
export function deleteStdMain(colId) {
return request({
- url: '/default-api/datastd/stdmain/main/' + colId,
+ url: '/default-api/datastd/stdmain/mainAppr/' + colId,
method: 'delete'
})
}
diff --git a/vue-fastapi-frontend/src/views/datastd/main/index.vue b/vue-fastapi-frontend/src/views/datastd/main/index.vue
index f97efec..ce170d5 100644
--- a/vue-fastapi-frontend/src/views/datastd/main/index.vue
+++ b/vue-fastapi-frontend/src/views/datastd/main/index.vue
@@ -498,7 +498,7 @@ const handleRemove = (row) => {
})
.then(() => {
handleQuery();
- proxy.$modal.msgSuccess("删除成功");
+ proxy.$modal.msgSuccess("提交删除审批成功");
})
.catch(() => {});
};
diff --git a/vue-fastapi-frontend/src/views/system/flow/conf.vue b/vue-fastapi-frontend/src/views/system/flow/conf.vue
index e078ee3..38ab0e6 100644
--- a/vue-fastapi-frontend/src/views/system/flow/conf.vue
+++ b/vue-fastapi-frontend/src/views/system/flow/conf.vue
@@ -62,7 +62,7 @@ import { listRole } from "@/api/system/role";
import {getFlowConfList,saveFlowConfig } from "@/api/flow/flow";
const { proxy } = getCurrentInstance();
-const moduleList = ref([{'module':'metaDataInfo','text':'元数据'},{'module':'other','text':'其他模块(敬请期待)'}])
+const moduleList = ref([{'module':'metaDataInfo','text':'元数据'},{'module':'dataStdMain','text':'数据标准'},{'module':'other','text':'其他模块(敬请期待)'}])
let graph = null
const roleList = ref([])
const data = ref([])
diff --git a/vue-fastapi-frontend/src/views/system/flow/dataStdMainAppr.vue b/vue-fastapi-frontend/src/views/system/flow/dataStdMainAppr.vue
new file mode 100644
index 0000000..773a55c
--- /dev/null
+++ b/vue-fastapi-frontend/src/views/system/flow/dataStdMainAppr.vue
@@ -0,0 +1,302 @@
+
+
+
+
+
+
+
+ 基础数据
+ 指标数据
+
+
+
+
+
+
+
+ {{ changeTypeMap[row.changeType] || row.changeType }}
+
+
+
+
+ {{ approStatusMap[row.approStatus] || row.approStatus }}
+
+
+
+
+ 查看详情
+
+
+
+
+
+
+
+
+
+
+
+
+ 标准编号:
+
+ {{ formatValue(formData.stdNum) }}
+
+
+
+
+
+ 标准中文名:
+
+ {{ formatValue(formData.stdName) }}
+
+
+
+
+
+ 标准英文名:
+
+ {{ formatValue(formData.stdCode) }}
+
+
+
+
+
+
+
+
+
+ 标准业务定义:
+
+ {{ formatValue(formData.stdMenu) }}
+
+
+
+
+
+ 标准类型:
+
+ {{ formatValue(stdTypeMap[formData.stdType] || formData.stdType) }}
+
+
+
+
+
+ 标准来源:
+
+ {{ formatValue(formData.stdSrc) }}
+
+
+
+
+
+
+
+
+
+ 数据类别:
+
+ {{ formatValue(dataClasMap[formData.dataClas] || formData.dataClas) }}
+
+
+
+
+
+ 来源系统:
+
+ {{ formatValue(formData.sourceSystem) }}
+
+
+
+
+
+ 安全等级:
+
+ {{ formatValue(formData.securityLevel) }}
+
+
+
+
+
+ 代码编号:
+
+ {{ formatValue(formData.codeNum) }}
+
+
+
+
+
+
+
+
+
+ 业务认责部门:
+
+ {{ formatValue(formData.bussDeptId) }}
+
+
+
+
+
+ 业务认责人员:
+
+ {{ formatValue(formData.bussUser) }}
+
+
+
+
+
+
+
+
+
+ 技术认责部门:
+
+ {{ formatValue(formData.techDeptId) }}
+
+
+
+
+
+ 技术认责人员:
+
+ {{ formatValue(formData.techUser) }}
+
+
+
+
+
+ 关闭
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/vue-fastapi-frontend/src/views/system/flow/index.vue b/vue-fastapi-frontend/src/views/system/flow/index.vue
index aaa710c..5084820 100644
--- a/vue-fastapi-frontend/src/views/system/flow/index.vue
+++ b/vue-fastapi-frontend/src/views/system/flow/index.vue
@@ -516,6 +516,10 @@
+
+
+
+
@@ -524,13 +528,17 @@
import {getFlowConfList, getApprovalList, operateProcess, cancelMyFlow } from "@/api/flow/flow"
import { getMetaInfoApplyBusinessDetail } from "@/api/meta/metaInfo"
import {v4 as uuid} from 'uuid'
+import DataStdMainTable from './dataStdMainAppr.vue'; // 路径根据实际调整
+const stdMainVisible = ref(false);
const { proxy } = getCurrentInstance();
import { ref, nextTick, computed, watch, reactive, onMounted } from 'vue'
import {getWaitingFlowCount} from "../../../api/flow/flow.js";
import cache from "../../../plugins/cache.js";
import {Graph} from "@antv/x6";
const flowTab = ref('waiting')
+const selectedFlowId = ref('');
+
const data = reactive({
queryParams: {
pageNum: 1,
@@ -806,8 +814,9 @@ function resetQuery(){
getList()
}
function showBusinessDataDialog(row){
- businessDialog.value = true
+
if (row.businessType === 'metaDataInfo'){
+ businessDialog.value = true
let param = {
businessId: row.businessId
}
@@ -952,6 +961,10 @@ function showBusinessDataDialog(row){
}
}
})
+ }else if(row.businessType ==="dataStdMain"){
+
+ selectedFlowId.value = row.businessId;
+ stdMainVisible.value = true;
}
}