From cfad534fb9c6c157b3774bc4305a943ef5056718 Mon Sep 17 00:00:00 2001 From: "si@aidatagov.com" Date: Mon, 14 Apr 2025 01:25:19 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E5=85=B3=E7=B3=BB?= =?UTF-8?q?=E5=9B=BE=E8=B0=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/datastd_controller.py | 15 ++++- .../module_admin/dao/datastd_dao.py | 2 + .../module_admin/service/datastd_service.py | 43 ++++++++++++ .../src/views/datastd/stdcode/codeMap.vue | 66 ++++++++++++------- .../src/views/datastd/stdcode/index.vue | 4 +- 5 files changed, 102 insertions(+), 28 deletions(-) diff --git a/vue-fastapi-backend/module_admin/controller/datastd_controller.py b/vue-fastapi-backend/module_admin/controller/datastd_controller.py index 921dc33..7e806e6 100644 --- a/vue-fastapi-backend/module_admin/controller/datastd_controller.py +++ b/vue-fastapi-backend/module_admin/controller/datastd_controller.py @@ -527,7 +527,7 @@ async def change_std_main_onum( # 标准代码映射图谱 @datastdController.get( - '/stdcode/code/mapstdlist/{id}', response_model=PageResponseModel, dependencies=[Depends(CheckUserInterfaceAuth('datastd:stdcode:code:list'))] + '/stdcode/code/mapstdlistOld/{id}', response_model=PageResponseModel, dependencies=[Depends(CheckUserInterfaceAuth('datastd:stdcode:code:list'))] ) async def get_code_std_map_list( request: Request, @@ -536,4 +536,17 @@ async def get_code_std_map_list( ): code_page_query_result = await DataStdService.get_code_std_map_list_services(query_db, id) logger.info('获取列配置列表成功') + return ResponseUtil.success(data=code_page_query_result) + + +@datastdController.get( + '/stdcode/code/mapstdlist/{id}', response_model=PageResponseModel, dependencies=[Depends(CheckUserInterfaceAuth('datastd:stdcode:code:list'))] +) +async def get_code_map_list( + request: Request, + id: str, + query_db: AsyncSession = Depends(get_db), +): + code_page_query_result = await DataStdService.get_code_map_list(query_db, id) + logger.info('获取列配置列表成功') return ResponseUtil.success(data=code_page_query_result) \ No newline at end of file diff --git a/vue-fastapi-backend/module_admin/dao/datastd_dao.py b/vue-fastapi-backend/module_admin/dao/datastd_dao.py index 8a26852..14e355f 100644 --- a/vue-fastapi-backend/module_admin/dao/datastd_dao.py +++ b/vue-fastapi-backend/module_admin/dao/datastd_dao.py @@ -106,9 +106,11 @@ class DataStdDao: select(DataStdCode) .where( DataStdCode.code_name == query_object.code_name if query_object.code_name else True, + DataStdCode.id == query_object.id if query_object.id else True, DataStdCode.code_status == query_object.code_status if query_object.code_status else True, DataStdCode.sys_id == query_object.sys_id if query_object.sys_id else True, DataStdCode.code_type == query_object.code_type if query_object.code_type else True, + DataStdCode.code_map_id == query_object.code_map_id if query_object.code_map_id else True, DataStdCode.parent_id == query_object.parent_id if query_object.parent_id else True, DataStdCode.class_id == query_object.class_id if query_object.class_id else True ) diff --git a/vue-fastapi-backend/module_admin/service/datastd_service.py b/vue-fastapi-backend/module_admin/service/datastd_service.py index eff8b07..eee9dd3 100644 --- a/vue-fastapi-backend/module_admin/service/datastd_service.py +++ b/vue-fastapi-backend/module_admin/service/datastd_service.py @@ -1028,3 +1028,46 @@ class DataStdService: "tableData": table_data, "children": children } + @classmethod + async def get_code_map_list(cls, query_db: AsyncSession, id: str): + check_model = DataStdCodeModel() + stdCode=await DataStdDao.get_std_code_by_id(query_db, id) + code_type="公司级" + if stdCode.code_type=='sys': + if stdCode.code_map_id: + check_model.id=stdCode.code_map_id + else: + check_model.id="no" + else: + check_model.code_map_id = id + code_type="系统级" + + main_list = await DataStdDao.get_data_code_list_by_info(query_db, check_model) + + if not main_list: + return { "children": []} # 如果 A 表没有数据,返回空结构 + + table_data = [] # 存储表格数据 + children = [] # 存储图谱数据 + + for main in main_list: + # 组织图谱数据(A 表作为父节点) + node = { + "id": f"node_{main.id}", # 使用 get() 方法访问字段 + "name": main.code_name, # 使用 get() 方法访问字段 + "label": main.code_num, # 使用 get() 方法访问字段 + "rate": 1.0, + "status": "B", + # "currency": main.get('stdNum'), # 使用 get() 方法访问字段 + "variableValue": code_type, + "variableUp": True, + "children": [], + } + + + children.append(node) + + return { + "tableData": table_data, + "children": children + } \ No newline at end of file diff --git a/vue-fastapi-frontend/src/views/datastd/stdcode/codeMap.vue b/vue-fastapi-frontend/src/views/datastd/stdcode/codeMap.vue index 1ff392c..9a56acc 100644 --- a/vue-fastapi-frontend/src/views/datastd/stdcode/codeMap.vue +++ b/vue-fastapi-frontend/src/views/datastd/stdcode/codeMap.vue @@ -1,5 +1,11 @@ + - diff --git a/vue-fastapi-frontend/src/views/datastd/stdcode/index.vue b/vue-fastapi-frontend/src/views/datastd/stdcode/index.vue index 9efe84a..7e25836 100644 --- a/vue-fastapi-frontend/src/views/datastd/stdcode/index.vue +++ b/vue-fastapi-frontend/src/views/datastd/stdcode/index.vue @@ -105,7 +105,7 @@ /> - + @@ -529,8 +532,10 @@ import {getFlowConfList, getApprovalList, operateProcess, cancelMyFlow } from "@ import { getMetaInfoApplyBusinessDetail } from "@/api/meta/metaInfo" import {v4 as uuid} from 'uuid' import DataStdMainTable from './dataStdMainAppr.vue'; // 路径根据实际调整 +import DataStdDictTable from './dataStdDictAppr.vue'; // 路径根据实际调整 const stdMainVisible = ref(false); +const stdDictVisible = ref(false); const { proxy } = getCurrentInstance(); import { ref, nextTick, computed, watch, reactive, onMounted } from 'vue' import {getWaitingFlowCount} from "../../../api/flow/flow.js"; @@ -962,10 +967,15 @@ function showBusinessDataDialog(row){ } }) }else if(row.businessType ==="dataStdMain"){ + console.log("打开标准1111") selectedFlowId.value = row.businessId; stdMainVisible.value = true; - } + }else if(row.businessType ==="dataStdDict"){ +console.log("打开字典222") +selectedFlowId.value = row.businessId; +stdDictVisible.value = true; +} } function agree(row){ From cb347d81d9567c2c84425dab627fc2c5745f6ba8 Mon Sep 17 00:00:00 2001 From: "si@aidatagov.com" Date: Thu, 24 Apr 2025 07:43:35 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E5=AE=A1=E6=89=B9=E6=A0=87=E5=87=86?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/datastd_controller.py | 54 ++++++++++++- .../module_admin/entity/do/datastd_do.py | 26 +++++++ .../module_admin/entity/vo/datastd_vo.py | 7 +- .../module_admin/service/datastd_service.py | 77 ++++++++++++++++++- .../src/views/datastd/stdcode/codeItem.vue | 30 ++++++-- 5 files changed, 183 insertions(+), 11 deletions(-) diff --git a/vue-fastapi-backend/module_admin/controller/datastd_controller.py b/vue-fastapi-backend/module_admin/controller/datastd_controller.py index 2ff3d66..561af2d 100644 --- a/vue-fastapi-backend/module_admin/controller/datastd_controller.py +++ b/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) logger.info(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'))]) @Log(title='标准代码与代码项管理', business_type=BusinessType.INSERT) async def add_std_code_with_items( @@ -118,6 +130,23 @@ async def add_std_code_with_items( # 返回响应 logger.info(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'))]) @Log(title='标准代码与代码项管理', business_type=BusinessType.INSERT) 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'))] ) 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 d36f1a2..ce28b0d 100644 --- a/vue-fastapi-backend/module_admin/entity/do/datastd_do.py +++ b/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_num = Column(String(50), 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): """ 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 3327943..7bdc602 100644 --- a/vue-fastapi-backend/module_admin/entity/vo/datastd_vo.py +++ b/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_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 class DataStdCodePageQueryModel(DataStdCodeModel): diff --git a/vue-fastapi-backend/module_admin/service/datastd_service.py b/vue-fastapi-backend/module_admin/service/datastd_service.py index 40be264..0e8be16 100644 --- a/vue-fastapi-backend/module_admin/service/datastd_service.py +++ b/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 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,DataStdMainApprModel,DataStdDictApprModel +from module_admin.entity.vo.datastd_vo import DataStdCodeModel,DeleteDataStdModel,DataStdDictModel,DataStdMainModel,DataStdMainApprModel,DataStdDictApprModel,DataStdCodeApprModel from utils.common_util import CamelCaseUtil import uuid from module_admin.entity.vo.approval_vo import ApplyModel @@ -12,6 +12,7 @@ from collections import defaultdict from datetime import datetime 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.user_vo import CurrentUserModel class DataStdService: """ @@ -146,12 +147,12 @@ class DataStdService: await query_db.commit() - return CrudResponseModel(is_success=True, message='删除列配置成功') + return CrudResponseModel(is_success=True, message='删除标准代码成功') except Exception as e: await query_db.rollback() raise e else: - raise ServiceException(message='传入列配置ID为空') + raise ServiceException(message='传入标准代码ID为空') @classmethod 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: await query_db.rollback() 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 async def edit_std_code_with_items_services(cls, request, query_db: AsyncSession, code: DataStdCodeModel, code_item_list: list[DataStdCodeModel]): """ diff --git a/vue-fastapi-frontend/src/views/datastd/stdcode/codeItem.vue b/vue-fastapi-frontend/src/views/datastd/stdcode/codeItem.vue index 0799e33..c9c410d 100644 --- a/vue-fastapi-frontend/src/views/datastd/stdcode/codeItem.vue +++ b/vue-fastapi-frontend/src/views/datastd/stdcode/codeItem.vue @@ -387,9 +387,31 @@ const handleSave = async () => { } }; +const selectedRows = ref([]); // 保存当前勾选的行 + 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); }; -// 删除选中行 -const handleRemove = () => { - const selectedRows = tableData.value.filter(row => row.isSelected); - tableData.value = tableData.value.filter(row => !row.isSelected); -}; + defineExpose({ handleSave }); From bc1c2a0a60e3ea5d12041676520f004d4cf60662 Mon Sep 17 00:00:00 2001 From: siyaqi Date: Thu, 24 Apr 2025 17:41:27 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E7=A0=81=E5=80=BC=E5=AE=A1=E6=89=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module_admin/dao/datastd_dao.py | 19 ++++++++++++++++--- .../module_admin/service/datastd_service.py | 11 +++++------ 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/vue-fastapi-backend/module_admin/dao/datastd_dao.py b/vue-fastapi-backend/module_admin/dao/datastd_dao.py index c78a6bf..d87a7f8 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,DataStdMainAppr,DataStdDictAppr -from module_admin.entity.vo.datastd_vo import DataStdCodeModel,DataStdDictModel,DataStdMainModel,DataStdMainApprModel,DataStdDictApprModel +from module_admin.entity.do.datastd_do import DataStdCode,DataStdDict,DataAstContent,DataAstContentRela,DataStdMain,DataStdMainAppr,DataStdDictAppr,DataStdCodeAppr +from module_admin.entity.vo.datastd_vo import DataStdCodeModel,DataStdDictModel,DataStdMainModel,DataStdMainApprModel,DataStdDictApprModel,DataStdCodeApprModel from module_admin.entity.do.dept_do import SysDept from utils.page_util import PageUtil from sqlalchemy.orm import aliased @@ -154,10 +154,23 @@ class DataStdDao: await db.flush() return col + @classmethod + async def add_std_code_appr(cls, db: AsyncSession,model:DataStdCodeApprModel): + col = DataStdCodeAppr( + **model.model_dump() + ) + db.add(col) + await db.flush() + return col + @classmethod async def delete_std_code(cls, db: AsyncSession, Id: str): await db.execute(delete(DataStdCode).where(DataStdCode.id == Id)) - + @classmethod + async def update_std_code_appr(cls, db: AsyncSession, update_data: DataStdCodeApprModel): + + await db.execute(update(DataStdCodeAppr), [update_data]) + await db.flush() @classmethod async def update_std_code(cls, db: AsyncSession, update_data: DataStdCodeModel): diff --git a/vue-fastapi-backend/module_admin/service/datastd_service.py b/vue-fastapi-backend/module_admin/service/datastd_service.py index 0e8be16..5834d82 100644 --- a/vue-fastapi-backend/module_admin/service/datastd_service.py +++ b/vue-fastapi-backend/module_admin/service/datastd_service.py @@ -85,7 +85,7 @@ class DataStdService: except Exception as e: await query_db.rollback() raise e - + @classmethod async def code_detail_services(cls, query_db: AsyncSession, col: str): @@ -208,7 +208,7 @@ class DataStdService: 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): + if not await cls.check_code_unique_services(query_db, code): raise ServiceException(message=f'标准代码{code.code_num}已经存在于正式表中,无法新增') # 先创建标准代码的审批记录 @@ -216,6 +216,7 @@ class DataStdService: appr_model.changeType = "add" appr_model.compareId = code.id appr_model.oldInstId = code.id + appr_model.code_status="9" appr_model.approStatus = "waiting" appr_model.flowId = str(uuid.uuid4()) # 新生成 Flow ID @@ -240,7 +241,7 @@ class DataStdService: item.parent_id = code.id # 设置父级 ID # 校验代码项是否已存在于正式表中 - if await cls.check_code_exists_in_official(query_db, item.code_num): + if not await cls.check_code_unique_services(query_db, item): raise ServiceException(message=f'代码项{item.code_num}已经存在于正式表中,无法新增') # 同样需要创建审批记录 @@ -253,9 +254,7 @@ class DataStdService: 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='新增标准代码和代码项成功') From 0bd9f6e67730172664adc22e5ef1d9974140e1d5 Mon Sep 17 00:00:00 2001 From: "si@aidatagov.com" Date: Fri, 25 Apr 2025 01:35:40 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E7=A0=81=E5=80=BC=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/datastd_controller.py | 2 +- .../module_admin/dao/datastd_dao.py | 18 +++ .../module_admin/service/approval_service.py | 40 ++++- .../module_admin/service/datastd_service.py | 153 ++++++++++++++++-- vue-fastapi-frontend/src/api/datastd/std.js | 6 +- 5 files changed, 198 insertions(+), 21 deletions(-) diff --git a/vue-fastapi-backend/module_admin/controller/datastd_controller.py b/vue-fastapi-backend/module_admin/controller/datastd_controller.py index 561af2d..63b0e07 100644 --- a/vue-fastapi-backend/module_admin/controller/datastd_controller.py +++ b/vue-fastapi-backend/module_admin/controller/datastd_controller.py @@ -96,7 +96,7 @@ async def 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) return ResponseUtil.success(msg=delete_std_code_result.message) -@datastdController.delete('/stdcode/codeWithItems/appr', dependencies=[Depends(CheckUserInterfaceAuth('datastd:stdcode:codeWithItems:delete'))]) +@datastdController.delete('/stdcode/codeappr/{ids}', dependencies=[Depends(CheckUserInterfaceAuth('datastd:stdcode:codeWithItems:delete'))]) @Log(title='标准代码与代码项管理', business_type=BusinessType.DELETE) async def delete_std_code_with_items_appr( request: Request, diff --git a/vue-fastapi-backend/module_admin/dao/datastd_dao.py b/vue-fastapi-backend/module_admin/dao/datastd_dao.py index d87a7f8..34d3882 100644 --- a/vue-fastapi-backend/module_admin/dao/datastd_dao.py +++ b/vue-fastapi-backend/module_admin/dao/datastd_dao.py @@ -57,6 +57,18 @@ class DataStdDao: ) return col_list @classmethod + async def get_last_std_code_appr_by_id(cls,db: AsyncSession, Id: str ): + result = await db.execute( + select(DataStdCodeAppr) + .where( + DataStdCodeAppr.oldInstId == Id, + DataStdCodeAppr.approStatus == "succeed" + ) + .order_by(DataStdCodeAppr.update_time.desc()) + .limit(1) + ) + return result.scalar_one_or_none() + @classmethod async def get_std_code_map_list(cls, db: AsyncSession, query_object: DataStdCodeModel, is_page: bool = False): # 构建查询条件 filters = [] @@ -803,6 +815,12 @@ class DataStdDao: query = select(DataStdDictAppr).where(*filters).order_by(desc(DataStdDictAppr.create_time)) return await PageUtil.paginate(db, query, 0, 0, False) @classmethod + async def get_std_code_appr_list(cls, flowId:str,db: AsyncSession): + filters = [] + filters.append(DataStdCodeAppr.flowId == flowId) + query = select(DataStdCodeAppr).where(*filters).order_by(desc(DataStdCodeAppr.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() diff --git a/vue-fastapi-backend/module_admin/service/approval_service.py b/vue-fastapi-backend/module_admin/service/approval_service.py index 5e7fad0..fbba1f1 100644 --- a/vue-fastapi-backend/module_admin/service/approval_service.py +++ b/vue-fastapi-backend/module_admin/service/approval_service.py @@ -14,7 +14,7 @@ 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,DataStdDictApprModel,DataStdDictModel +from module_admin.entity.vo.datastd_vo import DataStdCodeModel,DataStdDictModel,DataStdMainModel,DataStdMainApprModel,DataStdDictApprModel,DataStdDictModel,DataStdCodeApprModel class ApprovalService: @@ -96,7 +96,10 @@ class ApprovalService: await cls.syncStdMainInfo(result_db, flow_approval.businessId, edit.status) # 数据字典审批 elif flow_approval.businessType == 'dataStdDict': - await cls.syncStdDictInfo(result_db, flow_approval.businessId, edit.status) + await cls.syncStdDictInfo(result_db, flow_approval.businessId, edit.status) + # 标准代码审批 + elif flow_approval.businessType == 'dataStdCode': + await cls.syncStdCodeInfo(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='操作成功') @@ -193,6 +196,39 @@ class ApprovalService: return CrudResponseModel(is_success=True, message='操作成功') + + @classmethod + async def syncStdCodeInfo(cls, result_db: AsyncSession, suppId: str, operateType: str): + apprList = await DataStdDao.get_std_code_appr_list(suppId, result_db) + + for appr in apprList: + # 将 SQLAlchemy 模型实例转换为 Pydantic 模型实例 + appr_model = DataStdCodeApprModel.model_validate(appr) + + change_type = appr_model.changeType + if operateType =='succeed': + if change_type == "add": + # 将 DataStdDictApprModel 转换为 DataStdDictModel + main_model = DataStdDictModel(**appr_model.model_dump(exclude_unset=True, by_alias=True)) + + await DataStdDao.add_std_code(result_db, main_model) + + elif change_type == "edit": + # 使用 oldInstId 作为主键 + main_model = DataStdDictModel(**appr_model.model_dump(exclude_unset=True, by_alias=True)) + + main_model.id = appr_model.oldInstId + await DataStdDao.update_std_code(result_db, main_model.model_dump(exclude_unset=True)) + + elif change_type == "delete": + await DataStdDao.delete_std_code(result_db, appr_model.oldInstId) + + # 更新 approStatus 状态 + appr_model.approStatus = operateType + await DataStdDao.update_std_dict_appr(result_db, appr_model) + + + return CrudResponseModel(is_success=True, message='操作成功') @classmethod diff --git a/vue-fastapi-backend/module_admin/service/datastd_service.py b/vue-fastapi-backend/module_admin/service/datastd_service.py index 5834d82..d38de0d 100644 --- a/vue-fastapi-backend/module_admin/service/datastd_service.py +++ b/vue-fastapi-backend/module_admin/service/datastd_service.py @@ -126,7 +126,55 @@ class DataStdService: else: raise ServiceException(message=f'标准代码{page_object.id}不存在') - + @classmethod + async def delete_std_code_with_items_appr( + cls, + ids: str, + query_db: AsyncSession, + current_user: CurrentUserModel + ): + """ + 批量删除标准代码及其代码项的审批流程。 + :param ids: 多个标准代码ID,用逗号分隔 + """ + try: + id_list = [i.strip() for i in ids.split(',') if i.strip()] + if not id_list: + raise ServiceException(message="请提供有效的标准代码ID列表") + + for std_id in id_list: + std_code = await DataStdDao.get_std_code_by_id(query_db, std_id) + if not std_code: + raise ServiceException(message=f"ID 为 {std_id} 的标准代码不存在,无法提交删除审批") + + + flow_id = str(uuid.uuid4()) + last_appr= await DataStdDao.get_last_std_code_appr_by_id(query_db,std_id) + + # 标准代码审批记录 + std_code_appr = DataStdCodeApprModel(**std_code.model_dump(exclude_unset=True, by_alias=True)) + std_code_appr.changeType = "delete" + std_code_appr.compareId = last_appr.id + std_code_appr.oldInstId = std_code.id + std_code_appr.approStatus = "waiting" + std_code_appr.code_status = "9" + std_code_appr.flowId = flow_id + std_code_appr.update_by = current_user.user.user_name + std_code_appr.update_time = datetime.now() + await DataStdDao.add_std_code_appr(query_db, std_code_appr) + # 发起审批流程(每个标准代码一条审批) + apply_model = ApplyModel() + apply_model.businessType = "dataStdCode" + apply_model.businessId = flow_id + apply_model.applicant = current_user.user.user_name + await ApprovalService.apply_services(query_db, apply_model, 'dataStdCode') + + return CrudResponseModel(is_success=True, message="批量提交删除标准代码审批成功!") + + except Exception as e: + await query_db.rollback() + raise ServiceException(message=f"提交删除标准代码审批失败: {str(e)}") + @classmethod async def delete_std_code_services(cls, request: Request, query_db: AsyncSession, page_object: DeleteDataStdModel): """ @@ -222,14 +270,6 @@ class DataStdService: # 将标准代码添加到审批表 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 @@ -254,12 +294,14 @@ class DataStdService: await DataStdDao.add_std_code_appr(query_db, item_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') - return CrudResponseModel(is_success=True, message='新增标准代码和代码项成功') - - - + return CrudResponseModel(is_success=True, message='提交新增标准代码审批成功!') @classmethod async def edit_std_code_with_items_services(cls, request, query_db: AsyncSession, code: DataStdCodeModel, code_item_list: list[DataStdCodeModel]): """ @@ -302,7 +344,88 @@ class DataStdService: return CrudResponseModel(is_success=True, message='标准代码和代码项修改成功') except Exception as e: await query_db.rollback() - raise ServiceException(message=f"修改标准代码失败: {str(e)}") + raise ServiceException(message=f"修改标准代码失败: {str(e)}") + + + @classmethod + async def edit_std_code_with_items_appr( + cls, + code: DataStdCodeModel, + code_item_list: list[DataStdCodeModel], + query_db: AsyncSession, + current_user: CurrentUserModel + ): + """ + 修改标准代码及其代码项的审批流程(修改审批)。 + code_item.id 存在为修改,若为空则为新增。 + """ + # 更新时间及人 + 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 not await cls.check_code_unique_services(query_db, code): + raise ServiceException(message=f'标准代码{code.code_num}不存在或已存在,无法提交修改审批') + + # 创建标准代码的审批记录(changeType 为 update) + appr_model = DataStdCodeApprModel(**code.model_dump(exclude_unset=True, by_alias=True)) + last_appr= await DataStdDao.get_last_std_code_appr_by_id(query_db,code.id) + appr_model.changeType = "update" + appr_model.compareId = last_appr.id # 对比对象为正式表的 ID + appr_model.oldInstId = code.id + appr_model.code_status = "9" + appr_model.approStatus = "waiting" + appr_model.flowId = str(uuid.uuid4()) # flowId 共用 + + await DataStdDao.add_std_code_appr(query_db, appr_model) + + # 同步处理代码项 + for item in code_item_list: + item.parent_id = code.id + 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 + + if item.id: # 修改项 + if not await cls.check_code_unique_services(query_db, item): + raise ServiceException(message=f'父级代码{code.code_num}下代码项{item.code_num}重复,无法提交修改审批') + + item_appr_model = DataStdCodeApprModel(**item.model_dump(exclude_unset=True, by_alias=True)) + item_appr_model.changeType = "update" + item_appr_model.compareId = item.id + item_appr_model.oldInstId = item.id + item_appr_model.approStatus = "waiting" + item_appr_model.flowId = appr_model.flowId + + await DataStdDao.add_std_code_appr(query_db, item_appr_model) + + else: # 新增项 + item.id = str(uuid.uuid4()) + item.create_by = current_user.user.user_name + item.create_time = datetime.now() + + if not await cls.check_code_unique_services(query_db, item): + raise ServiceException(message=f'父级代码{code.code_num}下代码项{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 + + await DataStdDao.add_std_code_appr(query_db, item_appr_model) + + # 创建审批流程 + apply_model = ApplyModel() + apply_model.businessType = "dataStdCode" + apply_model.businessId = appr_model.flowId + apply_model.applicant = appr_model.update_by + await ApprovalService.apply_services(query_db, apply_model, 'dataStdCode') + + return CrudResponseModel(is_success=True, message='提交修改标准代码审批成功!') + @classmethod async def check_code_unique_services(cls, query_db: AsyncSession, page_object: DataStdCodeModel): """ diff --git a/vue-fastapi-frontend/src/api/datastd/std.js b/vue-fastapi-frontend/src/api/datastd/std.js index 4483590..40d0d0d 100644 --- a/vue-fastapi-frontend/src/api/datastd/std.js +++ b/vue-fastapi-frontend/src/api/datastd/std.js @@ -58,7 +58,7 @@ export function getStdCodeMap(rowId) { // 新增标准代码 export function addStdCode(data) { return request({ - url: '/default-api/datastd/stdcode/codeWithItems', + url: '/default-api/datastd/stdcode/codeWithItems/appr', method: 'post', data: data }) @@ -76,7 +76,7 @@ export function addStdCodeItem(data) { // 修改标准代码 export function updateStdCode(data) { return request({ - url: '/default-api/datastd/stdcode/codeWithItems', + url: '/default-api/datastd/stdcode/codeWithItems/appr', method: 'put', data: data }) @@ -94,7 +94,7 @@ export function updateStdCodeItem(data) { // 删除标准代码 export function deleteStdCode(colId) { return request({ - url: '/default-api/datastd/stdcode/code/' + colId, + url: '/default-api/datastd/stdcodeappr/code/' + colId, method: 'delete' }) } From 60ec81290248dec441766c2f24c222aec039bbaf Mon Sep 17 00:00:00 2001 From: siyaqi Date: Fri, 25 Apr 2025 18:34:37 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E5=AE=A1=E6=89=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module_admin/service/approval_service.py | 10 ++--- .../module_admin/service/datastd_service.py | 40 ++++++++++++++++--- .../src/views/system/flow/conf.vue | 2 +- 3 files changed, 40 insertions(+), 12 deletions(-) diff --git a/vue-fastapi-backend/module_admin/service/approval_service.py b/vue-fastapi-backend/module_admin/service/approval_service.py index fbba1f1..f07e9ad 100644 --- a/vue-fastapi-backend/module_admin/service/approval_service.py +++ b/vue-fastapi-backend/module_admin/service/approval_service.py @@ -208,14 +208,13 @@ class ApprovalService: change_type = appr_model.changeType if operateType =='succeed': if change_type == "add": - # 将 DataStdDictApprModel 转换为 DataStdDictModel - main_model = DataStdDictModel(**appr_model.model_dump(exclude_unset=True, by_alias=True)) + main_model = DataStdCodeModel(**appr_model.model_dump(exclude_unset=True, by_alias=True)) await DataStdDao.add_std_code(result_db, main_model) elif change_type == "edit": # 使用 oldInstId 作为主键 - main_model = DataStdDictModel(**appr_model.model_dump(exclude_unset=True, by_alias=True)) + main_model = DataStdCodeModel(**appr_model.model_dump(exclude_unset=True, by_alias=True)) main_model.id = appr_model.oldInstId await DataStdDao.update_std_code(result_db, main_model.model_dump(exclude_unset=True)) @@ -225,8 +224,9 @@ class ApprovalService: # 更新 approStatus 状态 appr_model.approStatus = operateType - await DataStdDao.update_std_dict_appr(result_db, appr_model) - + main_appro_model = DataStdCodeApprModel(**appr_model.model_dump(exclude_unset=True, by_alias=True)) + + await DataStdDao.update_std_code_appr(result_db, main_appro_model.model_dump(exclude_unset=True)) return CrudResponseModel(is_success=True, message='操作成功') diff --git a/vue-fastapi-backend/module_admin/service/datastd_service.py b/vue-fastapi-backend/module_admin/service/datastd_service.py index d38de0d..6283137 100644 --- a/vue-fastapi-backend/module_admin/service/datastd_service.py +++ b/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 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,DataStdMainApprModel,DataStdDictApprModel,DataStdCodeApprModel +from module_admin.entity.vo.datastd_vo import DataStdCodeModel,DeleteDataStdModel,DataStdDictModel,DataStdMainModel,DataStdMainApprModel,DataStdDictApprModel,DataStdCodeApprModel,DataStdCodePageQueryModel from utils.common_util import CamelCaseUtil import uuid from module_admin.entity.vo.approval_vo import ApplyModel @@ -377,9 +377,20 @@ class DataStdService: appr_model.code_status = "9" appr_model.approStatus = "waiting" appr_model.flowId = str(uuid.uuid4()) # flowId 共用 + appr_model.id = str(uuid.uuid4()) # flowId 共用 await DataStdDao.add_std_code_appr(query_db, appr_model) - + + # query_object. + query_object = DataStdCodePageQueryModel( + ) + query_object.parent_id=code.id + query_object.class_id="codeItem" + query_object.page_size=100 + query_object.page_num=1 + code_item_list_old = await DataStdDao.get_std_code_list(query_db, query_object, False) + new_ids = {item.id for item in code_item_list if item.id} + # 同步处理代码项 for item in code_item_list: item.parent_id = code.id @@ -390,14 +401,16 @@ class DataStdService: if item.id: # 修改项 if not await cls.check_code_unique_services(query_db, item): raise ServiceException(message=f'父级代码{code.code_num}下代码项{item.code_num}重复,无法提交修改审批') - + item_appr_model = DataStdCodeApprModel(**item.model_dump(exclude_unset=True, by_alias=True)) + last_item_appr= await DataStdDao.get_last_std_code_appr_by_id(query_db,item_appr_model.id) item_appr_model.changeType = "update" - item_appr_model.compareId = item.id + item_appr_model.compareId = last_item_appr.id item_appr_model.oldInstId = item.id item_appr_model.approStatus = "waiting" item_appr_model.flowId = appr_model.flowId - + item_appr_model.id = str(uuid.uuid4()) # flowId 共用 + await DataStdDao.add_std_code_appr(query_db, item_appr_model) else: # 新增项 @@ -416,7 +429,22 @@ class DataStdService: item_appr_model.flowId = appr_model.flowId await DataStdDao.add_std_code_appr(query_db, item_appr_model) - + for old_item in code_item_list_old: + if old_item["id"] not in new_ids: + # 创建“删除”审批记录 + delete_appr_model = DataStdCodeApprModel(**old_item) + delete_appr_model.changeType = "delete" + last_appr= await DataStdDao.get_last_std_code_appr_by_id(query_db,old_item["id"]) + delete_appr_model.compareId = last_appr.id + delete_appr_model.oldInstId = old_item["id"] + delete_appr_model.approStatus = "waiting" + delete_appr_model.flowId = appr_model.flowId + delete_appr_model.id = str(uuid.uuid4()) + + delete_appr_model.update_by = current_user.user.user_name + delete_appr_model.update_time = datetime.now() + + await DataStdDao.add_std_code_appr(query_db, delete_appr_model) # 创建审批流程 apply_model = ApplyModel() apply_model.businessType = "dataStdCode" diff --git a/vue-fastapi-frontend/src/views/system/flow/conf.vue b/vue-fastapi-frontend/src/views/system/flow/conf.vue index 04dd203..e6d296e 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':'dataStdMain','text':'数据标准'},{'module':'dataStdDict','text':'数据字典'},{'module':'other','text':'其他模块(敬请期待)'}]) +const moduleList = ref([{'module':'metaDataInfo','text':'元数据'},{'module':'dataStdMain','text':'数据标准'},{'module':'dataStdDict','text':'数据字典'},{'module':'dataStdCode','text':'标准代码'},{'module':'other','text':'其他模块(敬请期待)'}]) let graph = null const roleList = ref([]) const data = ref([]) From dd06b1bf31c755813eb46effeced911216526c57 Mon Sep 17 00:00:00 2001 From: siyaqi Date: Mon, 28 Apr 2025 11:30:51 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vue-fastapi-backend/module_admin/dao/approval_dao.py | 6 +++--- .../module_admin/service/approval_service.py | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/vue-fastapi-backend/module_admin/dao/approval_dao.py b/vue-fastapi-backend/module_admin/dao/approval_dao.py index 615f5ff..2bb088d 100644 --- a/vue-fastapi-backend/module_admin/dao/approval_dao.py +++ b/vue-fastapi-backend/module_admin/dao/approval_dao.py @@ -45,7 +45,7 @@ class ApprovalDao: (FlowApproval.businessType == query_param.businessType) if query_param.businessType else True, or_(*[FlowApproval.nextStepRole.like(f'%{role}%') for role in roleList], FlowApproval.nextStepUser.like(f'%{current_user.user.user_name}%')), - ).order_by(FlowApproval.applyTime) + ).order_by(FlowApproval.applyTime.desc()) .distinct()) # 注意:这里不执行查询,而是将查询对象传递给 paginate 方法 result = await PageUtil.paginate(db, query, query_param.page_num, query_param.page_size, True) @@ -61,7 +61,7 @@ class ApprovalDao: (FlowApproval.businessType == query_param.businessType) if query_param.businessType else True, FlowApproval.approvalFlow.like(f'%{current_user.user.user_name}%') ) - .order_by(FlowApproval.applyTime) + .order_by(FlowApproval.applyTime.desc()) .distinct() ) # 注意:这里不执行查询,而是将查询对象传递给 paginate 方法 @@ -77,7 +77,7 @@ class ApprovalDao: FlowApproval.applicant == current_user.user.user_name, (FlowApproval.businessType == query_param.businessType) if query_param.businessType else True, ) - .order_by(FlowApproval.applyTime) + .order_by(FlowApproval.applyTime.desc()) .distinct() ) # 注意:这里不执行查询,而是将查询对象传递给 paginate 方法 diff --git a/vue-fastapi-backend/module_admin/service/approval_service.py b/vue-fastapi-backend/module_admin/service/approval_service.py index f07e9ad..8804b15 100644 --- a/vue-fastapi-backend/module_admin/service/approval_service.py +++ b/vue-fastapi-backend/module_admin/service/approval_service.py @@ -212,7 +212,7 @@ class ApprovalService: await DataStdDao.add_std_code(result_db, main_model) - elif change_type == "edit": + elif change_type == "update": # 使用 oldInstId 作为主键 main_model = DataStdCodeModel(**appr_model.model_dump(exclude_unset=True, by_alias=True))