TEST1

USE [app]
GO
/****** Object:  StoredProcedure [dbo].[usp_Gfm_CreateGForm]    Script Date: 2023/11/15 15:27:56 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
-- =============================================
-- Author:		<Kitty Zuo>
-- Create date: <2023-11-14>
-- Description:	<根据JSON传参,将已产生的Group Form写入GFM_FORM_R和GFM_FORM_APPROVER_R>
-- =============================================

--本SP需增加try、catch和trans机制,当更新db有异常时需rollback已写入的数据,只记录该requestLog,并把Catch到的异常信息写入到LogMsg栏位!!!

ALTER PROCEDURE [dbo].[usp_Gfm_CreateGForm] @json NVARCHAR(MAX) AS BEGIN SET NOCOUNT ON;

-- 解析 JSON 参数
DECLARE @company NVARCHAR(50), @formKind NVARCHAR(50), @formNo NVARCHAR(50);
DECLARE @approveContents NVARCHAR(MAX),@gfmWorkFlowId NVARCHAR(50),@gfmFormNo NVARCHAR(50),@requestId NVARCHAR(50);
DECLARE @phaseId NVARCHAR(50), @roleName NVARCHAR(255), @approveId NVARCHAR(50), @approverNo NVARCHAR(50);
DECLARE @gfmEmpId NVARCHAR(50),@logMsg NVARCHAR(MAX);
SELECT @company = [value] FROM OPENJSON(@json) WHERE [key] = 'company';
SELECT @formKind = [value] FROM OPENJSON(@json) WHERE [key] = 'formKind';
SELECT @formNo = [value] FROM OPENJSON(@json) WHERE [key] = 'formNo';
SELECT @approveContents = [value] FROM OPENJSON(@json) WHERE [key] = 'approveContents';
SELECT @gfmWorkFlowId = [value] FROM OPENJSON(@json) WHERE [key] = 'gfmWorkFlowId';
SELECT @gfmFormNo = [value] FROM OPENJSON(@json) WHERE [key] = 'gfmFormNo'; 
SELECT @requestId = [value] FROM OPENJSON(@json) WHERE [key] = 'requestId'; 
DECLARE @approversJSON NVARCHAR(MAX) = (SELECT [value] FROM OPENJSON(@json) WHERE [key] = 'approversInfo');
DECLARE @approversCursor INT;
DECLARE @approversCount INT;
DECLARE @currentApprover NVARCHAR(MAX);
DECLARE @approversEmpNo NVARCHAR(255);
DECLARE @approversApproveId nvarchar(50);
DECLARE @approversGfmEmpId nvarchar(50);
set @approversGfmEmpId = '';
	-- 写入主表数据 GFM_FORM_R

	SET NOCOUNT ON;
	 BEGIN TRY
	 BEGIN TRAN

	BEGIN    
		INSERT INTO GFM_FORM_R (FormKind,FormNo,Company,FormBeginDate,ApproveContents,FormStatus,ActionStatus,GfmWorkFlowId,GfmFormNo,CreateBy,CreateDate,UpdateBy,UpdateDate,Active)
		VALUES(@formKind, @formNo, @company,GETDATE(),@approveContents,'UA','CreateForm_Success',@gfmWorkFlowId,@gfmFormNo,'CreateForm',GETDATE(),'CreateForm',GETDATE(),'Y');
	END

	--将签核人员数据写入GFM_FORM_APPROVER_R(后台传参时要处理为需要写入的人员才传入)
	BEGIN
		-- 计算审批人个数
		
		SELECT @approversCount = COUNT(*) FROM OPENJSON(@approversJSON);
		SELECT @approversCursor = 0, @approversCount = COUNT(*) FROM OPENJSON(@approversJSON);

		-- 循环处理每个审批人
		WHILE @approversCursor < @approversCount
		BEGIN
			-- 获取当前审批人数据
			SET @currentApprover = (SELECT [value] FROM OPENJSON(@approversJSON) WHERE [key] = CAST(@approversCursor AS NVARCHAR(10)));

			-- 解析当前审批人数据
			SELECT @phaseId = [value] FROM OPENJSON(@currentApprover) WHERE [key] = 'phaseId';
			SELECT @roleName = [value] FROM OPENJSON(@currentApprover) WHERE [key] = 'roleName';
			SELECT @approveId = [value] FROM OPENJSON(@currentApprover) WHERE [key] = 'approveId';
			SELECT @approverNo = [value] FROM OPENJSON(@currentApprover) WHERE [key] = 'approverNo';
			SELECT @gfmEmpId = [value] FROM OPENJSON(@currentApprover) WHERE [key] = 'gfmEmpId';
			
			-- 写入数据到表 GFM_FORM_APPROVER_R
			INSERT INTO GFM_FORM_APPROVER_R (formKind, formNo, phaseId, roleName, approveId, ApproverEmpNo,Company,GfmFormNo,gfmEmpId,CreateBy,CreateDate,UpdateBy,UpdateDate,Active)
			VALUES (@formKind, @formNo, @phaseId, @roleName, @approveId, @approverNo,@company,@gfmFormNo,@gfmEmpId,'CreateForm',GETDATE(),'CreateForm',GETDATE(),'Y');

			---- 计数器自增
			 SET @approversCursor = @approversCursor + 1;     
			   IF @approversCursor=1
					SET @approversEmpNo = @approverNo;
					SET @approversApproveId=@approveId;
					SET @approversGfmEmpId=@gfmEmpId;
			   IF @approversCursor>1 
					SET @approversEmpNo =@approversEmpNo+','+ @approverNo;
					SET @approversApproveId=@approversApproveId+','+@approveId;
					SET @approversGfmEmpId=@approversGfmEmpId+','+@gfmEmpId;
		PRINT @approversGfmEmpId
		END;
	END;
	PRINT @approversGfmEmpId
	COMMIT TRAN
	 END TRY
	 BEGIN CATCH------------有异常被捕获
        IF @@TRANCOUNT > 0---------------判断有没有事务
        BEGIN
            ROLLBACK TRAN----------回滚事务
        END 
			-----------记录存储过程执行时的错误信息,自定义
    END CATCH--------结束异常处理
	
	-- 记录Log [GFM_REQUEST_LOG]
	--BEGIN    
	--	INSERT INTO [GFM_REQUEST_LOG] (B2BRequestId,FormKind,FormNo,Company,ApproveId,Approvers,RequestType,RequestStatus,GfmFormNo,LogMsg,GfmEmpId,Entrance,CreateBy,CreateDate)
	--	VALUES(@requestId,@formKind, @formNo, @company,@approveId,@approversEmpNo,'CreateForm','SUCCESS',@gfmFormNo,N'需增加try、catch和trans机制,当有更新db有异常时需rollback已写入的数据,只记录该requestLog,并把Catch到的异常信息@logMsg写入到LogMsg栏位',@gfmEmpId,'PC','CreateForm',GETDATE());
	--END

END




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值