|
@ -126,6 +126,54 @@ class DataStdService: |
|
|
else: |
|
|
else: |
|
|
raise ServiceException(message=f'标准代码{page_object.id}不存在') |
|
|
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 |
|
|
@classmethod |
|
|
async def delete_std_code_services(cls, request: Request, query_db: AsyncSession, page_object: DeleteDataStdModel): |
|
|
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) |
|
|
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: |
|
|
for item in code_item_list: |
|
|
item.id = str(uuid.uuid4()) # 新生成 ID |
|
|
item.id = str(uuid.uuid4()) # 新生成 ID |
|
@ -254,12 +294,14 @@ class DataStdService: |
|
|
|
|
|
|
|
|
await DataStdDao.add_std_code_appr(query_db, item_appr_model) |
|
|
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 |
|
|
@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]): |
|
|
""" |
|
|
""" |
|
@ -303,6 +345,87 @@ 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 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 |
|
|
@classmethod |
|
|
async def check_code_unique_services(cls, query_db: AsyncSession, page_object: DataStdCodeModel): |
|
|
async def check_code_unique_services(cls, query_db: AsyncSession, page_object: DataStdCodeModel): |
|
|
""" |
|
|
""" |
|
|