From 9da879e16d036bc405e221bb275306498090c7c3 Mon Sep 17 00:00:00 2001 From: siyaqi Date: Tue, 17 Jun 2025 18:03:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=83=E6=95=B0=E6=8D=AE=E6=A0=87=E7=AD=BE?= =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/metadata_config_controller.py | 9 +- .../dao/batch_label_config_dao.py | 18 +++- .../entity/vo/metadata_config_vo.py | 17 ++++ .../service/batch_label_config_service.py | 89 ++++++++++++++++++- .../src/store/modules/user.js | 18 ++-- .../src/views/datastd/stdcode/codeMap.vue | 1 + .../views/metadataConfig/metaclas/index.vue | 88 +++++++++++++++--- 7 files changed, 207 insertions(+), 33 deletions(-) diff --git a/vue-fastapi-backend/module_admin/controller/metadata_config_controller.py b/vue-fastapi-backend/module_admin/controller/metadata_config_controller.py index 4cdc96f..770ddec 100644 --- a/vue-fastapi-backend/module_admin/controller/metadata_config_controller.py +++ b/vue-fastapi-backend/module_admin/controller/metadata_config_controller.py @@ -18,6 +18,7 @@ from module_admin.entity.vo.metadata_config_vo import ( BatchDataopLabelConfigModel, BatchDatatypeLabelConfigModel, BatchBusiLabelConfigPageQueryModel, + BatchDataopLabelConfigModelVo, BatchDataopLabelModelPageQueryModel, BatchDatatypeLabelConfigPageQueryModel, SecuBizPermiConfigQueryModel, @@ -357,19 +358,19 @@ async def get_busi_label_detail( @metadataConfigController.get('/dataopLabel/list', response_model=PageResponseModel) async def get_dataop_label_list( request: Request, - query: BatchDataopLabelConfigModel, + query: BatchDataopLabelConfigModel=Depends(BatchDataopLabelModelPageQueryModel.as_query), query_db: AsyncSession = Depends(get_db), ): - result = await BatchLabelConfigService.get_dataop_list_services(query_db, query, is_page=True) + result = await BatchLabelConfigService.get_dataop_vo_services(query_db, query, is_page=True) logger.info('获取操作标签配置列表成功') - return ResponseUtil.success(model_content=result) + return ResponseUtil.success(data=result) @metadataConfigController.post('/dataopLabel') @ValidateFields(validate_model='add_dataop_label') async def add_dataop_label( request: Request, - model: BatchDataopLabelConfigModel, + model: BatchDataopLabelConfigModelVo, query_db: AsyncSession = Depends(get_db), current_user: CurrentUserModel = Depends(LoginService.get_current_user), diff --git a/vue-fastapi-backend/module_admin/dao/batch_label_config_dao.py b/vue-fastapi-backend/module_admin/dao/batch_label_config_dao.py index 21a96ec..8ea6cc4 100644 --- a/vue-fastapi-backend/module_admin/dao/batch_label_config_dao.py +++ b/vue-fastapi-backend/module_admin/dao/batch_label_config_dao.py @@ -49,11 +49,25 @@ class BatchLabelConfigDAO: @classmethod async def get_dataop_list(cls, db: AsyncSession, query_object, is_page: bool = False): query = select(BatchDataopLabelConfig).where( - BatchDataopLabelConfig.optype.like(f"%{query_object.optype}%") if query_object.optype else True, BatchDataopLabelConfig.mdl_name == query_object.mdl_name if query_object.mdl_name else True, + BatchDataopLabelConfig.ssys_cd == query_object.ssys_cd if query_object.ssys_cd else True, ) - + return await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page) + @classmethod + async def get_dataop_list_all(cls, db: AsyncSession, query_object): + conditions = [] + + if query_object.mdl_name: + conditions.append(BatchDataopLabelConfig.mdl_name == query_object.mdl_name) + + if query_object.ssys_cd: + conditions.append(BatchDataopLabelConfig.ssys_cd == query_object.ssys_cd) + + stmt = select(BatchDataopLabelConfig).where(*conditions) + + result = await db.execute(stmt) + return result.scalars().all() @classmethod async def add_dataop(cls, db: AsyncSession, obj): diff --git a/vue-fastapi-backend/module_admin/entity/vo/metadata_config_vo.py b/vue-fastapi-backend/module_admin/entity/vo/metadata_config_vo.py index 4a2db07..407a60f 100644 --- a/vue-fastapi-backend/module_admin/entity/vo/metadata_config_vo.py +++ b/vue-fastapi-backend/module_admin/entity/vo/metadata_config_vo.py @@ -257,6 +257,23 @@ class BatchDataopLabelConfigModel(BaseModel): mdl_name: Optional[str] = Field(default=None, description='模块名称') upd_by: Optional[str] = Field(default=None, description='更新人员') upd_time: Optional[datetime] = Field(default=None, description='更新时间') + +class BatchDataopLabelConfigModelVo(BaseModel): + """ + 批处理数据操作标签配置 Pydantic 模型 + """ + model_config = ConfigDict(alias_generator=to_camel, from_attributes=True) + config1: Optional[float] = Field(default=None, description='参数1') + config2: Optional[float] = Field(default=None, description='参数2') + config3: Optional[float] = Field(default=None, description='参数3') + config4: Optional[float] = Field(default=None, description='参数4') + config5: Optional[float] = Field(default=None, description='参数5') + config6: Optional[float] = Field(default=None, description='参数6') + config7: Optional[float] = Field(default=None, description='参数7') + ssys_cd: Optional[str] = Field(default=None, description='系统代码') + mdl_name: Optional[str] = Field(default=None, description='模块名称') + upd_by: Optional[str] = Field(default=None, description='更新人员') + upd_time: Optional[datetime] = Field(default=None, description='更新时间') class BatchDatatypeLabelConfigModel(BaseModel): """ 批处理字段类型标签配置 Pydantic 模型 diff --git a/vue-fastapi-backend/module_admin/service/batch_label_config_service.py b/vue-fastapi-backend/module_admin/service/batch_label_config_service.py index d9a1c4a..ab75c45 100644 --- a/vue-fastapi-backend/module_admin/service/batch_label_config_service.py +++ b/vue-fastapi-backend/module_admin/service/batch_label_config_service.py @@ -1,7 +1,7 @@ from sqlalchemy.ext.asyncio import AsyncSession from module_admin.dao.batch_label_config_dao import BatchLabelConfigDAO from module_admin.entity.vo.common_vo import CrudResponseModel -from module_admin.entity.vo.metadata_config_vo import BatchBusiLabelConfigModel,BatchDataopLabelConfigModel,BatchDatatypeLabelConfigModel +from module_admin.entity.vo.metadata_config_vo import BatchBusiLabelConfigModel,BatchDataopLabelConfigModel,BatchDatatypeLabelConfigModel,BatchDataopLabelConfigModelVo from exceptions.exception import ServiceException import uuid from utils.common_util import CamelCaseUtil @@ -70,14 +70,95 @@ class BatchLabelConfigService: @classmethod async def get_dataop_list_services(cls, db: AsyncSession, query_object, is_page: bool = False): return await BatchLabelConfigDAO.get_dataop_list(db, query_object, is_page) + @classmethod + async def get_dataop_vo_services(cls, db: AsyncSession, query_object, is_page: bool = False): + result = BatchDataopLabelConfigModelVo() # 自定义返回 VO 对象 + resultList = await BatchLabelConfigDAO.get_dataop_list_all(db, query_object) + if resultList: + for item in resultList: + if item.optype == "唯一类型": + result.config1 = item.config1 + result.config2 = item.config2 + result.config3 = item.config3 + result.config4 = item.config4 + result.ssys_cd = item.ssys_cd + result.mdl_name = item.mdl_name + result.upd_by = item.upd_by + result.upd_time = item.upd_time + + elif item.optype == "忽略类型": + result.config5 = item.config1 # 注意:忽略类型只有 config1, config2 + result.config6 = item.config2 + # 其他公共字段,如果你也想覆盖可再写一次: + result.ssys_cd = item.ssys_cd + result.mdl_name = item.mdl_name + result.upd_by = item.upd_by + result.upd_time = item.upd_time + + return result + @classmethod async def add_dataop_services(cls, db: AsyncSession, page_object): try: - page_object.onum = str(uuid.uuid4()) - await BatchLabelConfigDAO.add_dataop(db, page_object) + + resultList = await BatchLabelConfigDAO.get_dataop_list_all(db, page_object) + + # 唯一类型对象 + onopLabel = BatchDataopLabelConfigModel( + optype="唯一类型", + config1=page_object.config1, + config2=page_object.config2, + config3=page_object.config3, + config4=page_object.config4, + ssysCd=page_object.ssys_cd, + mdlName=page_object.mdl_name, + updBy=page_object.upd_by, + updTime=page_object.upd_time + ) + + # 忽略类型对象 + inopLabel = BatchDataopLabelConfigModel( + optype="忽略类型", + config1=page_object.config5, + config2=page_object.config6, + ssysCd=page_object.ssys_cd, + mdlName=page_object.mdl_name, + updBy=page_object.upd_by, + updTime=page_object.upd_time + ) + + if resultList: + for item in resultList: + if item.optype == "唯一类型": + update_data = { + "config1": onopLabel.config1, + "config2": onopLabel.config2, + "config3": onopLabel.config3, + "config4": onopLabel.config4, + "ssys_cd": onopLabel.ssys_cd, + "mdl_name": onopLabel.mdl_name, + "upd_by": onopLabel.upd_by, + "upd_time": onopLabel.upd_time + } + elif item.optype == "忽略类型": + update_data = { + "config1": inopLabel.config1, + "config2": inopLabel.config2, + "ssys_cd": inopLabel.ssys_cd, + "mdl_name": inopLabel.mdl_name, + "upd_by": inopLabel.upd_by, + "upd_time": inopLabel.upd_time + } + else: + continue # 忽略未知类型 + await BatchLabelConfigDAO.edit_dataop(db, item.onum, update_data) + else: + await BatchLabelConfigDAO.add_dataop(db, onopLabel) + await BatchLabelConfigDAO.add_dataop(db, inopLabel) + await db.commit() - return CrudResponseModel(is_success=True, message="新增成功") + return CrudResponseModel(is_success=True, message="新增或更新成功") except Exception as e: await db.rollback() raise e diff --git a/vue-fastapi-frontend/src/store/modules/user.js b/vue-fastapi-frontend/src/store/modules/user.js index 3dbb5e7..3d8e084 100644 --- a/vue-fastapi-frontend/src/store/modules/user.js +++ b/vue-fastapi-frontend/src/store/modules/user.js @@ -31,16 +31,7 @@ const useUserStore = defineStore( setToken(res.token) this.token = res.token resolve() - datasourcetree() - .then(res => { - this.dsSysList = res.rows || [] // 确保为空时不报错 - resolve(res) - }) - .catch(error => { - this.dsSysList = [] // 请求失败也清空列表,避免残留 - reject(error) - }) }).catch(error => { reject(error) }) @@ -66,6 +57,15 @@ const useUserStore = defineStore( } else { this.roles = ['ROLE_DEFAULT'] } + datasourcetree() + .then(res => { + this.dsSysList = res.rows || [] // 确保为空时不报错 + resolve(res) + }) + .catch(error => { + this.dsSysList = [] // 请求失败也清空列表,避免残留 + reject(error) + }) this.id = user.userId this.name = user.userName this.avatar = avatar diff --git a/vue-fastapi-frontend/src/views/datastd/stdcode/codeMap.vue b/vue-fastapi-frontend/src/views/datastd/stdcode/codeMap.vue index cd27c0d..12af09b 100644 --- a/vue-fastapi-frontend/src/views/datastd/stdcode/codeMap.vue +++ b/vue-fastapi-frontend/src/views/datastd/stdcode/codeMap.vue @@ -84,6 +84,7 @@ const props = defineProps({ }, }); + const getSrcSysName = (id) => { const match = dsSysList.find(item => item.id === id); return match ? match.name : id; diff --git a/vue-fastapi-frontend/src/views/metadataConfig/metaclas/index.vue b/vue-fastapi-frontend/src/views/metadataConfig/metaclas/index.vue index 1716c6f..5f24481 100644 --- a/vue-fastapi-frontend/src/views/metadataConfig/metaclas/index.vue +++ b/vue-fastapi-frontend/src/views/metadataConfig/metaclas/index.vue @@ -64,11 +64,11 @@ stripe > - - - + + + - + 业务类型参数调整 @@ -110,17 +110,46 @@ stripe > - - - - + + + + - + 字段处理类型参数调整 + +唯一类型数值类判定条件 - + + + + + + + + + + 唯一类型非数值类判定条件 + + + + 忽略类型数值类判断条件 + + + + 忽略类型其他判断条件 + + + + + 保存 { getList1(); getList2(); + getList3(); });