IF EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID('[dbo].[mps_gen_biz_auto_web]') AND type = 'P')
DROP PROCEDURE [dbo].[mps_gen_biz_auto_web]
GO
create procedure mps_gen_biz_auto_web(
@cmpid int,
@bizid int
)
as
begin
set nocount on
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
declare @s1 nvarchar(100) 
declare @detail nvarchar(100) 
declare @ds1 varchar(100)
declare @dss varchar(MAX)  
declare @detailold nvarchar(100) 
declare @order2 nvarchar(100) 
declare @i int 
declare @tbname varchar(50)
declare @dbname varchar(50)
declare @fkey   varchar(50) 
exec sys_sql_getTableNamePk @cmpid,'biz',@bizid,0,@tbname output,@fkey output ,@dbname output 
declare @ord2tag2 int 
declare @sql nvarchar(MAX) 
declare @ss nvarchar(MAX) 
declare @ss1 nvarchar(MAX) 
declare @cntname varchar(1000) 

declare @websql nvarchar(max)=''
declare @websvcid int = 0

declare @web varchar(1000) 
select top 1 @web=biz_auto2_webservice from mps_biztype with(nolock) where biz_id=@bizid 
set @web = isnull(@web,'')
if (@web='')
begin
return 
end 

if (@web>'') 
begin
select top 1 @websvcid=svc_id, @websql=svc_extsql   from ebs_kernel.dbo.pub_webservice with(nolock) where svc_cmpid=@cmpid and svc_name=@web 
set @websql = ISNULL(@websql,'') 
set @websvcid = ISNULL(@websvcid,0) 
end 

set @web = @web+'_biz_'+convert(varchar(10),@bizid)+'_ord'   
if (dbo.mps_sys_checkkeywords('crm.bizauto',@bizid,0,'','')<>0) 
begin
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].['+@web+']') and OBJECTPROPERTY(id, N'IsProcedure') = 1) 
set @ss='drop procedure '+@web
execute(@ss) 
delete mps_sql with(rowlock) where sql_cmpid=@cmpid and sql_name=@web 
return 
end

declare @websql1 nvarchar(max)='' 
exec pub_gen_webservice_proc_sql @cmpid,@websvcid,@websql,1,@websql1 output 

declare @tbext varchar(1000) 

if (dbo.mps_sys_checkkeywords('crm.bizauto',@bizid,0,'','')<>0) 
begin
delete mps_sql with(rowlock) where sql_cmpid=@cmpid and sql_name=@web
return 
end

set @sql = dbo.mps_sys_getusercode('crm.bizauto',@bizid,0)
set @sql = ltrim(@sql) 

set @i = 0 
 
set @ss = @sql 


BEGIN
set @ss1 = @ss 

set @sql = '' 
set @sql = @sql+' set @cmpid  ='+convert(varchar(10),@cmpid)+'
     declare @bizid int ='+convert(varchar(10),@bizid)+'
     declare @ordid bigint = @objid 
     declare @operation varchar(50) ='''' 
     declare @errorinfo nvarchar(4000) ='''' 
     declare @genordnoauto int=1 
     declare @autoapplyjob varchar(500)=''''
     
     
     select top 1 @useruid=case when @useruid=0 then ord_createcuid else @useruid end ,
@userdpid=case when @userdpid=0 then ord_createdpid else @userdpid end ,
@branchid=case when @branchid=0 then ord_bcid else @branchid end   from '+@dbname+@tbname+' with(nolock) where ord_id=@ordid 
     
     
declare @ord2group2 nvarchar(50) 
set @ord2group2 = '''' 
declare @newordid bigint  
 declare @i int 
 declare @nonedate datetime 
set @nonedate = CONVERT(datetime,''1910-1-1'')
 set @operation = ''continue''
 set @errorinfo = '''' 
 --- 以下代码是接口配置中产生的
 '+@websql1+N'
 --- 以下是预处理事件中的临时表
 '
 -- 对@ss 进行一些函数替换
 set @ss = replace(@ss,'deletetask()','delete mps_task_java with(rowlock) where tsk_id=@taskid ') 
 set @ss = replace(@ss,'genordno(','set @genordnoauto=dbo.genordno(') 
 set @ss = replace(@ss,'applycurrentflow(','set @autoapplyjob=dbo.applycurrentflow(') 
 set @ss = replace(@ss,'applycurrentflow()','applycurrentflow(0,0,0)') 
 
 set @tbext = '#o_'+convert(varchar(10),@bizid)+'_auto_master'
 
 if (charindex('#master',@ss1)>0) 
 begin
 set @ss=REPLACE(@ss,'#master',@tbext) 
 set @ds1 = @dbname+@tbname 
 set @sql = @sql+char(13)+char(10)+
 'exec drop_temp_table '''+@tbext+''' '+char(13)+char(10)+
'select *   into '+@tbext+' from '+@dbname+@tbname+N' with(nolock) where ord_id=@ordid '+char(13)+char(10)
 end
 if (charindex('#romaster',@ss1)>0) 
 begin
 set @tbext = @tbext+'_old'  ;
 set @ss=REPLACE(@ss,'#romaster',@tbext) 
 set @ds1 = @dbname+@tbname 
 set @sql = @sql+char(13)+char(10)+
 'exec drop_temp_table '''+@tbext+''' '+char(13)+char(10)+
'select *   into '+@tbext+' from '+@dbname+@tbname+N' with(nolock) where ord_id=@ordid '+char(13)+char(10)
 end
 if (charindex('#task',@ss1)>0) 
 begin
 set @tbext = '#o_'+convert(varchar(10),@bizid)+'_auto_task'
 set @ss=REPLACE(@ss,'#task',@tbext) 
 set @sql = @sql+char(13)+char(10)+
 'exec drop_temp_table '''+@tbext+''' '+char(13)+char(10)+
'create table '+@tbext+'task(objtype varchar(20),ctgid int,objid bigint,objid2 bigint,cuid int,infotype nvarchar(50),info nvarchar(4000),jbid bigint) '
 end
 if (charindex('#account',@ss1)>0) 
 begin
 set @tbext = '#o_'+convert(varchar(10),@bizid)+'_auto_account'
 set @ss=REPLACE(@ss,'#account',@tbext) 
 set @sql = @sql+char(13)+char(10)+
 'exec drop_temp_table '''+@tbext+''' '+char(13)+char(10)+
'create table '+@tbext+'(acctype varchar(30),acccategory varchar(30),accdate varchar(30),fiidreal int,fiid int,objidreal bigint,objid bigint,origin int,value int,used int,suspended int,ready int,changed int,available int,actual int) '+char(13)+char(10) 
 end
 
 
 -- 以下代码是生成子表临时表
 
 declare c11 cursor LOCAL FORWARD_ONLY READ_ONLY for
select distinct biz2_tag  from mps_biztype2  with(nolock) where biz2_bizid=@bizid 
open c11

FETCH NEXT FROM c11 INTO @ord2tag2 
WHILE (@@FETCH_STATUS = 0)
BEGIN
set @detail = '#detail'+convert(varchar(10),@ord2tag2) 
set @tbext = '#o_'+convert(varchar(10),@bizid)+'_'+convert(varchar(10),@ord2tag2)+'_auto_detail'
set @order2 = @dbname+@tbname+'_'+convert(varchar(10),@ord2tag2) 

if (charindex(@detail,@ss1)>0) 
begin
set @ss=REPLACE(@ss,@detail,@tbext) 
 set @sql = @sql+char(13)+char(10)+
'exec drop_temp_table '''+@tbext+''' '+char(13)+char(10)+
'select * , null recid into '+@tbext+' from '+@order2+N' with(nolock) where ord2_ordid=@ordid 
 update '+@tbext+' set recid=ord2_id '+char(13)+char(10) 
 
 set @ds1 = @order2
 set @dss = ''
 exec mps_gen_default_code @order2 , @tbext , 'ord2_id' , @dss output 
 set @sql = @sql+@dss+char(13)+char(10) 
 end
 
 set @detail = '#rodetail'+convert(varchar(10),@ord2tag2) 
set @tbext = '#o_'+convert(varchar(10),@bizid)+'_'+convert(varchar(10),@ord2tag2)+'_auto_detail_old'
set @order2 = @dbname+@tbname+'_'+convert(varchar(10),@ord2tag2) 

if (charindex(@detail,@ss1)>0) 
begin
set @ss=REPLACE(@ss,@detail,@tbext) 
 set @sql = @sql+char(13)+char(10)+
'exec drop_temp_table '''+@tbext+''' '+char(13)+char(10)+
'select * into '+@tbext+' from '+@order2+N' with(nolock) where ord2_ordid=@ordid '+char(13)+char(10) 
 end
 
 FETCH NEXT FROM c11 INTO @ord2tag2 
END
CLOSE c11
DEALLOCATE c11 

set @sql=@sql+N'
 '+@ss+char(13)+char(10) 
 
 begin
 set @tbext = '#o_'+convert(varchar(10),@bizid)+'_auto_master'
 set @sql=@sql+N'
 if (@operation=''remove'') 
 begin
 delete mps_task_java with(rowlock) where tsk_id=@taskid 
 end 
 if (@operation=''continue'') 
 begin
 set @nonedate = @nonedate '+CHAR(13)+CHAR(10)
 -- 需要更新主表
 if (charindex('#master',@ss1)>0 and charindex('update',@ss1)>0 and charindex('#master',@ss1)>charindex('update',@ss1)) 
 begin
 set @s1 = @dbname +@tbname 
 exec mps_sys_gen_updatestatement @s1,'old','new','ord_id,ord_bizid,ord_cmpid,ord_updated,ord_bcid,ord_groupkey,ord_finished,ord_date',@dss output 
 -- 回写主表
 if (len(@dss)>10) 
 set @sql = @sql+char(13)+char(10)+
'update old set '+char(13)+char(10)+@dss + char(13)+char(10)+
'from '+@dbname+@tbname+N' old with(rowlock) , '+@tbext+' new  where old.ord_id=new.ord_id ' +char(13)+char(10) 
end 
--- 处理明细表
declare c11 cursor LOCAL FORWARD_ONLY READ_ONLY for
select distinct biz2_tag  from mps_biztype2  with(nolock) where biz2_bizid=@bizid 
open c11

FETCH NEXT FROM c11 INTO @ord2tag2 
WHILE (@@FETCH_STATUS = 0)
BEGIN
set @detail = '#detail'+convert(varchar(10),@ord2tag2) 
set @tbext = '#o_'+convert(varchar(10),@bizid)+'_'+convert(varchar(10),@ord2tag2)+'_auto_detail'
set @order2 = @dbname+@tbname+'_'+convert(varchar(10),@ord2tag2) 
if (charindex(@detail,@ss1)>0 and charindex('insert',@ss1)>0 and charindex(@detail,@ss1)>charindex('insert',@ss1)) 
begin
-- 清理一下明细数据
set @sql = @sql+char(13)+char(10)+
'update '+@tbext+' set ord2_ordid=case when ord2_ordid=0 then  @ordid else ord2_ordid end , ord2_date=case when ord2_date<''1920-01-01'' then getdate() else ord2_date end,ord2_updated=case when ord2_updated<''1920-01-01'' then getdate() else ord2_updated end  '+char(13)+char(10) 
exec mps_gen_insert_code @order2,'','ord2_id,ord2_tag,ord2_group,ord2_ordid',@dss output 
 set @sql = @sql+char(13)+char(10)+
'insert into  '+@order2+'(ord2_tag,ord2_group,ord2_ordid,'+@dss+') '+char(13)+char(10) 
exec mps_gen_insert_code @order2,'new','ord2_id,ord2_tag,ord2_group,ord2_ordid',@dss output 
set @sql = @sql +'
select '+convert(varchar(10),@ord2tag2)+',biz2_caption,ordid,'+@dss+'
from mps_biztype2 with(nolock) ,  '+@tbext+' new 
where biz2_bizid='+convert(varchar(10),@bizid)+' and biz2_tag='+convert(varchar(10),@ord2tag2)+'
and new.ord2_ordid=@ordid and (new.recid is null )  '+char(13)+char(10) 
 end
 if (charindex(@detail,@ss1)>0 and charindex('update',@ss1)>0 and charindex(@detail,@ss1)>charindex('update',@ss1)) 
begin
exec mps_sys_gen_updatestatement @order2,'old','new','ord2_id,ord2_ordid,ord2_tag,ord2_updated',@dss output 
if (len(@dss)>10) 
set @sql = @sql+char(13)+char(10)+
'update old set '+char(13)+char(10)+@dss+char(13)+char(10)+
'from '+@order2+' old with(rowlock) , '+@tbext+N' new  '+char(13)+char(10)+
'where old.ord2_id=new.ord2_id and new.recid is not null ' +char(13)+char(10) 
end 
if (charindex(@detail,@ss1)>0 and charindex('delete',@ss1)>0 and charindex(@detail,@ss1)>charindex('delete',@ss1)) 
begin
set @sql = @sql+char(13)+char(10)+
'delete '+@order2+' with(rowlock) '+char(13)+char(10)+
'where ord2_ordid=@ordid and  ( not exists (select 1 from '+@tbext+' old where '+@order2+'.ord2_id = old.ord2_id and (old.recid is not null))) '+char(13)+char(10) 
end 
 FETCH NEXT FROM c11 INTO @ord2tag2 
END
CLOSE c11
DEALLOCATE c11 


set @sql = @sql +N'
end 
--- 清除临时表 
'

 
if (charindex('#task',@ss1)>0) 
 begin
 set @tbext = '#o_'+convert(varchar(10),@bizid)+'_auto_task'
 set @sql = @sql+char(13)+char(10)+
 ' delete '+@tbext+' where cuid is null or info is null or objid is null  or ctgid is null '+
 ' insert into mps_task(tsk_cmpid,tsk_bcid,tsk_branch,tsk_dpid,tsk_depart,tsk_cuid,tsk_cuname,tsk_date,tsk_type,tsk_objtype,tsk_ctgid,tsk_objid,tsk_objid2,tsk_message,tsk_jbid) '+char(13)+char(10)+
 ' select distinct cu_cmpid,cu_bcid,cu_branch,cu_dpid,cu_depart,cu_id,cu_callname,getdate(),'+char(13)+char(10)+
 'case when infotype is null then ''普通任务'' else infotype end , '+char(13)+char(10)+
 'case when objtype is null or objtype='''' then ''biz'' else objtype end , '+char(13)+char(10)+
 'case when ctgid is null or ctgid=0 then '+convert(varchar(10),@bizid)+' else ctgid end , '+char(13)+char(10)+
 'case when objid  is null or objid=0 then @newordid else objid end , '+char(13)+char(10)+
 'case when objid2  is null then 0 else objid2 end , '+char(13)+char(10)+
 'case when info  is null then '''' else info end , '+char(13)+char(10)+
 'case when jbid  is null or jbid=0 then 0 else jbid end   '+char(13)+char(10)+
 'from '+@tbext+' , mps_login with(nolock) where cu_id=cuid '+char(13)+char(10)+
 'exec drop_temp_table '''+@tbext+''' '+char(13)+char(10) 
 end
 
if (charindex('#master',@ss1)>0) 
begin
set @sql =@sql+ 'exec drop_temp_table ''#o_'+convert(varchar(10),@bizid)+'_auto_master''' + char(13)+char(10) 
end 
if (charindex('#romaster',@ss1)>0) 
begin
set @sql =@sql+ 'exec drop_temp_table ''#o_'+convert(varchar(10),@bizid)+'_auto_master_old''' + char(13)+char(10) 
end 
 
 declare c11 cursor LOCAL FORWARD_ONLY READ_ONLY for
select distinct biz2_tag  from mps_biztype2  with(nolock) where biz2_bizid=@bizid 
open c11
FETCH NEXT FROM c11 INTO @ord2tag2 
WHILE (@@FETCH_STATUS = 0)
BEGIN
set @detail = '#detail'+convert(varchar(10),@ord2tag2) 
set @tbext = '#o_'+convert(varchar(10),@bizid)+'_'+convert(varchar(10),@ord2tag2)+'_auto_detail'
set @order2 = @dbname+@tbname+'_'+convert(varchar(10),@ord2tag2) 
if (charindex(@detail,@ss1)>0) 
begin
set @sql =@sql+ 'exec drop_temp_table '''+@tbext+'''' + char(13)+char(10) 
end
set @detail = '#rodetail'+convert(varchar(10),@ord2tag2) 
set @tbext = '#o_'+convert(varchar(10),@bizid)+'_'+convert(varchar(10),@ord2tag2)+'_auto_detail_old'
set @order2 = @dbname+@tbname+'_'+convert(varchar(10),@ord2tag2) 
if (charindex(@detail,@ss1)>0) 
begin
set @sql =@sql+ 'exec drop_temp_table '''+@tbext+'''' + char(13)+char(10) 
end
 FETCH NEXT FROM c11 INTO @ord2tag2 
END
CLOSE c11
DEALLOCATE c11 
if (charindex('#account',@ss1)>0) 
 begin
 set @tbext = '#o_'+convert(varchar(10),@bizid)+'_auto_account'
 set @sql =@sql+ 'exec drop_temp_table '''+@tbext+'''' + char(13)+char(10) 
 end
 if (dbo.checksyntax(@websql,'#webservice','','')=0) 
begin
set @sql=@sql+N'
exec drop_temp_table ''#webservice''  
'
end 
 
end

end  
  
   
  
  
 set @ss = N'
if (@autoapplyjob!='''') 
begin
declare @ordbcid int
select top 1 @ordbcid=ord_bcid,@userdpid=case when @userdpid=0 then ord_createdpid else @userdpid end ,@useruid = case when @useruid=0 then ord_createcuid else @useruid end 
from '+@dbname+@tbname+' with(nolock) where ord_id=@ordid 
    exec mps_do_execute_job_auto @cmpid ,@ordbcid ,@userdpid ,@useruid,0 , @autoapplyjob,@bizid ,@ordid  
end 

'
 
 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].['+@web+']') and OBJECTPROPERTY(id, N'IsProcedure') = 1) set @ss1='alter ' else set @ss1='create '
set @ss1 = @ss1+' procedure '+@web+char(13)+
'@cmpid int,'+ char(13)+
'@branchid int,'+ char(13)+
'@userdpid int,'+ char(13)+
'@useruid int ,'+ char(13)+
'@userotid int ,'+ char(13)+
'@taskid bigint ,'+ char(13)+
'@jbid bigint ,'+ char(13)+
'@ctgid int ,'+ char(13)+
'@ctgid2 int ,'+ char(13)+
'@objid bigint ,'+ char(13)+
'@objid2 bigint ,'+ char(13)+
'@xml nvarchar(max),'+ char(13)+
'@md5 varchar(32)'+ char(13)+
'as '+ char(13)+
'begin'+char(13) +char(9)+
'set nocount on
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED'+char(13) +char(9)+
'declare @xmldoc xml'+char(13) +char(9)+
'set @xml = REPLACE(@xml, ''encoding="UTF-8"'', '''')'+char(13) +char(9)+
'set @xml = REPLACE(@xml, ''encoding=''''UTF-8'', '''')'+char(13) +char(9)+
'set @xml = REPLACE(@xml, ''encoding=UTF-8'', '''')'+char(13) +char(9)+
'set @xml = REPLACE(@xml, ''xmlns="http'', ''xmln="http'')'+char(13) +char(9)+
'set @xml = REPLACE(@xml, ''xmlns=''''http'', ''xmln=''''http'')'+char(13) +char(9)+
'set @xml = REPLACE(@xml, ''xmlns=http'', ''xmln=http'')'+char(13) +char(9)+
'set @xmldoc = @xml'+char(13) +char(9)+
'set @taskid = isnull(@taskid,0) '+char(13) +char(9)+
'if (@taskid=-999999999) set @taskid=0 ' +char(13)+char(13) +char(9)+ @sql+char(13)+char(13) + 
'set nocount off'+char(13)+
'end' 

set @cntname=@web
set @web = @cntname+' {cmpid},{branchid},{userdpid},{useruid},{userotid},{taskid},{jbid},{ctgid},{ctgid2},{objid},{objid2},{xml},{md5}'
set @tbext = 'int|int|int|int|int|bigint|bigint|int|int|bigint|bigint|nvarchar(max)|varchar(32)'

 if (not exists(select * from mps_sql where sql_cmpid=@cmpid and sql_name=@cntname))
begin
insert into mps_sql(sql_cmpid,sql_name,sql_type,sql_text,sql_note,sql_sourcetables,sql_targettables,sql_params,sql_keyparam)
values(@cmpid,@cntname,'MSSQL',@web,'','','',@tbext,'')
end else 
begin
update mps_sql set 
sql_text=@web,
sql_sourcetables='',
sql_targettables='',
sql_params=@tbext,
sql_keyparam='' 
where sql_cmpid=@cmpid and sql_name=@cntname
end
 
 exec myprint @ss1
execute(@ss1)

set nocount off 
end