Browse Source

审批标准代码部分

master
si@aidatagov.com 2 months ago
parent
commit
cb347d81d9
  1. 54
      vue-fastapi-backend/module_admin/controller/datastd_controller.py
  2. 26
      vue-fastapi-backend/module_admin/entity/do/datastd_do.py
  3. 7
      vue-fastapi-backend/module_admin/entity/vo/datastd_vo.py
  4. 77
      vue-fastapi-backend/module_admin/service/datastd_service.py
  5. 30
      vue-fastapi-frontend/src/views/datastd/stdcode/codeItem.vue

54
vue-fastapi-backend/module_admin/controller/datastd_controller.py

@ -96,7 +96,19 @@ async def delete_std_code(
delete_std_code_result = await DataStdService.delete_std_code_services(request, query_db, delete_std_code) delete_std_code_result = await DataStdService.delete_std_code_services(request, query_db, delete_std_code)
logger.info(delete_std_code_result.message) logger.info(delete_std_code_result.message)
return ResponseUtil.success(msg=delete_std_code_result.message) return ResponseUtil.success(msg=delete_std_code_result.message)
@datastdController.delete('/stdcode/codeWithItems/appr', dependencies=[Depends(CheckUserInterfaceAuth('datastd:stdcode:codeWithItems:delete'))])
@Log(title='标准代码与代码项管理', business_type=BusinessType.DELETE)
async def delete_std_code_with_items_appr(
request: Request,
ids: str,
query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user),
):
try:
await DataStdService.delete_std_code_with_items_appr(ids, query_db, current_user)
return ResponseUtil.success(msg="提交删除标准代码审批成功")
except Exception as e:
return ResponseUtil.error(msg=str(e))
@datastdController.post('/stdcode/codeWithItems', dependencies=[Depends(CheckUserInterfaceAuth('datastd:stdcode:codeWithItems:add'))]) @datastdController.post('/stdcode/codeWithItems', dependencies=[Depends(CheckUserInterfaceAuth('datastd:stdcode:codeWithItems:add'))])
@Log(title='标准代码与代码项管理', business_type=BusinessType.INSERT) @Log(title='标准代码与代码项管理', business_type=BusinessType.INSERT)
async def add_std_code_with_items( async def add_std_code_with_items(
@ -118,6 +130,23 @@ async def add_std_code_with_items(
# 返回响应 # 返回响应
logger.info(result.message) logger.info(result.message)
return ResponseUtil.success(msg=result.message) return ResponseUtil.success(msg=result.message)
@datastdController.post('/stdcode/codeWithItems/appr', dependencies=[Depends(CheckUserInterfaceAuth('datastd:stdcode:codeWithItems:add'))])
@Log(title='标准代码与代码项管理', business_type=BusinessType.INSERT)
async def add_std_code_with_items_appr(
request: Request,
code: DataStdCodeModel,
code_item_list: list[DataStdCodeModel] = [],
query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user),
):
try:
# 调用 service 层的业务逻辑
await DataStdService.add_std_code_with_items_appr(
code, code_item_list, query_db, current_user
)
return ResponseUtil.success(msg="标准代码及代码项添加成功,等待审批")
except Exception as e:
return ResponseUtil.error(msg=str(e))
@datastdController.put('/stdcode/codeWithItems', dependencies=[Depends(CheckUserInterfaceAuth('datastd:stdcode:codeWithItems:add'))]) @datastdController.put('/stdcode/codeWithItems', dependencies=[Depends(CheckUserInterfaceAuth('datastd:stdcode:codeWithItems:add'))])
@Log(title='标准代码与代码项管理', business_type=BusinessType.INSERT) @Log(title='标准代码与代码项管理', business_type=BusinessType.INSERT)
async def edit_std_code_with_items( async def edit_std_code_with_items(
@ -140,6 +169,29 @@ async def edit_std_code_with_items(
@datastdController.put('/stdcode/codeWithItems/appr', dependencies=[Depends(CheckUserInterfaceAuth('datastd:stdcode:codeWithItems:edit'))])
@Log(title='标准代码与代码项管理', business_type=BusinessType.UPDATE)
async def edit_std_code_with_items_appr(
request: Request,
code: DataStdCodeModel,
code_item_list: list[DataStdCodeModel],
query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user),
):
try:
await DataStdService.edit_std_code_with_items_appr(
code, code_item_list, query_db, current_user
)
return ResponseUtil.success(msg="标准代码及代码项修改成功,等待审批")
except Exception as e:
return ResponseUtil.error(msg=str(e))
# ----------------------------------------------------------------数据字典---------------------------------------------------------------------------------------------------- # ----------------------------------------------------------------数据字典----------------------------------------------------------------------------------------------------
@datastdController.get('/stddict/dict/listappr', response_model=PageResponseModel, dependencies=[Depends(CheckUserInterfaceAuth('datastd:stddict:dict:list'))] @datastdController.get('/stddict/dict/listappr', response_model=PageResponseModel, dependencies=[Depends(CheckUserInterfaceAuth('datastd:stddict:dict:list'))]
) )

26
vue-fastapi-backend/module_admin/entity/do/datastd_do.py

@ -26,7 +26,33 @@ class DataStdCode(Base):
code_map_id = Column(String(50), default=None,comment='标准代码Id') code_map_id = Column(String(50), default=None,comment='标准代码Id')
code_map_num = Column(String(50), default=None, comment='标准代码编号') code_map_num = Column(String(50), default=None, comment='标准代码编号')
code_map_name = Column(String(200), default=None, comment='标准代码值') code_map_name = Column(String(200), default=None, comment='标准代码值')
class DataStdCodeAppr(Base):
"""
标准代码表 (Standard Code Table)
"""
__tablename__ = 't_datastd_code_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='更新时间')
code_num = Column(String(50), default=None, comment='标准代码编号')
code_name = Column(String(200), default=None, comment='标准代码值')
code_type = Column(String(10), default=None, comment='标准代码类型(sys:系统级 company:公司级)')
code_status = Column(String(1), default=None, comment='代码状态(0:有效 1:无效)')
sys_name = Column(String(50), default=None, comment='归属系统')
sys_id = Column(Integer, default=None, comment='归属系统Id')
class_id = Column(String(10), default=None, comment='代码类型(code:代码 codeItem:代码项)')
parent_id = Column(String(50), default=None, comment='父id')
code_map_id = Column(String(50), default=None,comment='标准代码Id')
code_map_num = Column(String(50), default=None, comment='标准代码编号')
code_map_name = Column(String(200), default=None, comment='标准代码值')
changeType = Column(String(10), default=None, comment='变更类型')
flowId = Column(String(50), default=None, comment='审批Id')
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已取消)')
class DataStdDict(Base): class DataStdDict(Base):
""" """

7
vue-fastapi-backend/module_admin/entity/vo/datastd_vo.py

@ -35,7 +35,12 @@ class DataStdCodeModel(BaseModel):
code_map_num: Optional[str] = Field(default=None, description='标准代码编号(映射)') code_map_num: Optional[str] = Field(default=None, description='标准代码编号(映射)')
code_map_name: Optional[str] = Field(default=None, description='标准代码名称(映射)') code_map_name: Optional[str] = Field(default=None, description='标准代码名称(映射)')
class DataStdCodeApprModel(DataStdCodeModel):
changeType: Optional[str] = Field(default=None, description='变更类型')
flowId: Optional[str] = Field(default=None, description='审批Id')
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已取消)')
@as_query @as_query
class DataStdCodePageQueryModel(DataStdCodeModel): class DataStdCodePageQueryModel(DataStdCodeModel):

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

@ -3,7 +3,7 @@ from sqlalchemy.ext.asyncio import AsyncSession
from exceptions.exception import ServiceException from exceptions.exception import ServiceException
from module_admin.dao.datastd_dao import DataStdDao from module_admin.dao.datastd_dao import DataStdDao
from module_admin.entity.vo.common_vo import CrudResponseModel from module_admin.entity.vo.common_vo import CrudResponseModel
from module_admin.entity.vo.datastd_vo import DataStdCodeModel,DeleteDataStdModel,DataStdDictModel,DataStdMainModel,DataStdMainApprModel,DataStdDictApprModel from module_admin.entity.vo.datastd_vo import DataStdCodeModel,DeleteDataStdModel,DataStdDictModel,DataStdMainModel,DataStdMainApprModel,DataStdDictApprModel,DataStdCodeApprModel
from utils.common_util import CamelCaseUtil from utils.common_util import CamelCaseUtil
import uuid import uuid
from module_admin.entity.vo.approval_vo import ApplyModel from module_admin.entity.vo.approval_vo import ApplyModel
@ -12,6 +12,7 @@ from collections import defaultdict
from datetime import datetime from datetime import datetime
from config.constant import CommonConstant from config.constant import CommonConstant
from module_admin.entity.vo.data_ast_content_vo import DataCatalogPageQueryModel, DeleteDataCatalogModel,DataCatalogResponseWithChildren,DataCatalogMovedRequest,DataCatalogMergeRequest,DataCatalogChild,DataCatalogMoverelRequest from module_admin.entity.vo.data_ast_content_vo import DataCatalogPageQueryModel, DeleteDataCatalogModel,DataCatalogResponseWithChildren,DataCatalogMovedRequest,DataCatalogMergeRequest,DataCatalogChild,DataCatalogMoverelRequest
from module_admin.entity.vo.user_vo import CurrentUserModel
class DataStdService: class DataStdService:
""" """
@ -146,12 +147,12 @@ class DataStdService:
await query_db.commit() await query_db.commit()
return CrudResponseModel(is_success=True, message='删除列配置成功') return CrudResponseModel(is_success=True, message='删除标准代码成功')
except Exception as e: except Exception as e:
await query_db.rollback() await query_db.rollback()
raise e raise e
else: else:
raise ServiceException(message='传入列配置ID为空') raise ServiceException(message='传入标准代码ID为空')
@classmethod @classmethod
async def add_std_code_with_items_services(cls, request, query_db: AsyncSession, code: DataStdCodeModel, code_item_list: list[DataStdCodeModel]): async def add_std_code_with_items_services(cls, request, query_db: AsyncSession, code: DataStdCodeModel, code_item_list: list[DataStdCodeModel]):
@ -190,6 +191,76 @@ class DataStdService:
except Exception as e: except Exception as e:
await query_db.rollback() await query_db.rollback()
raise ServiceException(message=f"新增标准代码失败: {str(e)}") raise ServiceException(message=f"新增标准代码失败: {str(e)}")
@classmethod
async def add_std_code_with_items_appr(
cls,
code: DataStdCodeModel,
code_item_list: list[DataStdCodeModel],
query_db: AsyncSession,
current_user: CurrentUserModel
):
# 设置标准代码的创建和更新时间
code.id = str(uuid.uuid4()) # 新生成 ID
code.create_by = current_user.user.user_name
code.create_time = datetime.now()
code.update_by = current_user.user.user_name
code.update_time = datetime.now()
code.sys_name = '公司级' if 'company' == code.code_type else code.sys_name
# 校验标准代码是否已存在于正式表中
if await cls.check_code_exists_in_official(query_db, code.code_num):
raise ServiceException(message=f'标准代码{code.code_num}已经存在于正式表中,无法新增')
# 先创建标准代码的审批记录
appr_model = DataStdCodeApprModel(**code.model_dump(exclude_unset=True, by_alias=True))
appr_model.changeType = "add"
appr_model.compareId = code.id
appr_model.oldInstId = code.id
appr_model.approStatus = "waiting"
appr_model.flowId = str(uuid.uuid4()) # 新生成 Flow ID
# 将标准代码添加到审批表
await DataStdDao.add_std_code_appr(query_db, appr_model)
# 创建审批申请
apply_model = ApplyModel()
apply_model.businessType = "dataStdCode"
apply_model.businessId = appr_model.flowId
apply_model.applicant = appr_model.create_by
await ApprovalService.apply_services(query_db, apply_model, 'dataStdCode')
# 同时处理代码项的添加
for item in code_item_list:
item.id = str(uuid.uuid4()) # 新生成 ID
item.create_by = current_user.user.user_name
item.create_time = datetime.now()
item.update_by = current_user.user.user_name
item.update_time = datetime.now()
item.sys_name = '公司级' if 'company' == item.code_type else item.sys_name
item.parent_id = code.id # 设置父级 ID
# 校验代码项是否已存在于正式表中
if await cls.check_code_exists_in_official(query_db, item.code_num):
raise ServiceException(message=f'代码项{item.code_num}已经存在于正式表中,无法新增')
# 同样需要创建审批记录
item_appr_model = DataStdCodeApprModel(**item.model_dump(exclude_unset=True, by_alias=True))
item_appr_model.changeType = "add"
item_appr_model.compareId = item.id
item_appr_model.oldInstId = item.id
item_appr_model.approStatus = "waiting"
item_appr_model.flowId = appr_model.flowId # 使用相同的 Flow ID
await DataStdDao.add_std_code_appr(query_db, item_appr_model)
# 创建代码项的审批申请
apply_model.businessId = item_appr_model.flowId
await ApprovalService.apply_services(query_db, apply_model, 'dataStdCode')
return CrudResponseModel(is_success=True, message='新增标准代码和代码项成功')
@classmethod @classmethod
async def edit_std_code_with_items_services(cls, request, query_db: AsyncSession, code: DataStdCodeModel, code_item_list: list[DataStdCodeModel]): async def edit_std_code_with_items_services(cls, request, query_db: AsyncSession, code: DataStdCodeModel, code_item_list: list[DataStdCodeModel]):
""" """

30
vue-fastapi-frontend/src/views/datastd/stdcode/codeItem.vue

@ -387,9 +387,31 @@ const handleSave = async () => {
} }
}; };
const selectedRows = ref([]); //
const handleSelectionChange = (selection) => { const handleSelectionChange = (selection) => {
multiple.value = selection.length > 0; selectedRows.value = selection;
multiple.value = selection.length === 0;
}; };
const handleRemove = () => {
if (selectedRows.value.length === 0) {
proxy.$modal.msgWarning("请先选择要删除的行");
return;
}
//
selectedRows.value.forEach(row => {
row._deleted = true;
});
//
tableData.value = tableData.value.filter(row => !row._deleted);
//
selectedRows.value = [];
multiple.value = true;
};
@ -412,11 +434,7 @@ const handleAdd = () => {
tableData.value.push(newRow); tableData.value.push(newRow);
}; };
//
const handleRemove = () => {
const selectedRows = tableData.value.filter(row => row.isSelected);
tableData.value = tableData.value.filter(row => !row.isSelected);
};
defineExpose({ defineExpose({
handleSave handleSave
}); });

Loading…
Cancel
Save