用「WCF + 通用存储过程网关」接口替代 Selenium(D://Learning//Python//工单自动化)导入工单: 单 Sprint 12 个项目 175s 跑完(旧方案 25~35 分钟),失败可断点续跑且不重复建单。 - 分层:transport(HTTP/协议)/ api(存储过程语义)/ domain(纯规则)/ workflow(阶段编排)/ store(SQLite 台账)/ report / CLI - 幂等:台账驱动断点续跑;dry-run 与跳过行不污染进度;--rollback-on-fail 清理半成品 - 命令:plan / apply / report / status,真实写入需 --yes - tools:只读探针、存储过程源码导出(sp_helptext)、导入诊断 - docs:调研与设计文档(含联调踩到的 5 个坑)+ 6 个关键存储过程源码 实测:Sprint 2026 Sprint 10 的 12 个项目全部完成建单→导入→确认→推送 TFS, 工单 225134–225145,35 个功能模块,重跑 plan 全部 skip-pushed。69 个单测通过。
78 lines
2.8 KiB
SQL
78 lines
2.8 KiB
SQL
-- =============================================
|
|
|
|
-- Author: <Author,,Name>
|
|
|
|
-- Create date: <Create Date,,>
|
|
|
|
-- Description: <Description,,>
|
|
|
|
-- =============================================
|
|
|
|
CREATE PROCEDURE [QuickTeam].[usp_GetWorkSheetsById]
|
|
|
|
@ProjectId nvarchar(50),
|
|
|
|
@isReclaimed bit=0
|
|
|
|
AS
|
|
|
|
BEGIN
|
|
|
|
SELECT
|
|
|
|
WorksheetId,
|
|
|
|
convert(nvarchar,sum([PaymentPercent])) as PaymentPercent
|
|
|
|
into #receiv
|
|
|
|
FROM [QuickTeam].[QuickTeam].[WorksheetPayment] group by WorksheetId
|
|
|
|
|
|
|
|
select t.*
|
|
|
|
,(case
|
|
|
|
when t.Finished='02' or t.Finished='03' then N'无回款'
|
|
|
|
else
|
|
|
|
case when rs.StatusAlia=N'回款已经确认' and PaymentPercent is null then N'开票已经确认'
|
|
|
|
else iif(rs.StatusAlia=N'回款已经确认',rs.StatusAlia+N'(累计回款:'+r.PaymentPercent+'%)',rs.StatusAlia) end
|
|
|
|
end
|
|
|
|
) as 'ReceiveStatusName'
|
|
|
|
--,rs.StatusAlia
|
|
|
|
--,iif(rs.StatusAlia=N'回款已经确认',rs.StatusAlia+N'(累计回款:'+r.PaymentPercent+'%)',rs.StatusAlia) as 'ReceiveStatusName'
|
|
|
|
,s.ServiceTypeAlias, r.PaymentPercent,e.Effort,f.Effort CurrentEffort from (
|
|
|
|
select ws.*,''as VersionId,'' as VersionCode,'' as VersionStatus,'' as NextOperator,'' as Operator from [QuickTeam].[QuickTeam].[WorkSheet] ws
|
|
|
|
union
|
|
|
|
select
|
|
|
|
ws.[WorkSheetId]
|
|
|
|
,wv.VersionCode as WorkSheetCode
|
|
|
|
,ws.[ProjectId]
|
|
|
|
,ws.[ProjectName]
|
|
|
|
,ws.[SystemName]
|
|
|
|
,ws.[Evaluator]
|
|
|
|
,ws.[TechnicalLeader]
|
|
|
|
,ws.[CustomerLeader]
|
|
|
|
,ws.[StartTime]
|
|
|
|
,ws.[EndTime]
|
|
|
|
,wv.[UpdateTime]
|
|
|
|
,ws.[Status]
|
|
|
|
,ws.ReceiveStatus
|
|
|
|
,ws.Finished
|
|
|
|
,ws.Finishtime
|
|
|
|
,ws.[ServiceType]
|
|
|
|
,ws.[ImplementContent]
|
|
|
|
,ws.[OtherInstructions]
|
|
|
|
,ws.CurrentVersionId
|
|
|
|
,ws.isMerge
|
|
|
|
,ws.DeleteFlag
|
|
|
|
,ws.Operation
|
|
|
|
,ws.OperateUserName
|
|
|
|
,ws.isReclaimed
|
|
|
|
,ws.BelongTeam
|
|
|
|
,wv.VersionId,wv.VersionCode,wv.VersionStatus,wv.NextOperator,wv.Operator from [QuickTeam].[QuickTeam].[WorkSheet] ws
|
|
|
|
join [QuickTeam].[WorkSheetVersion] wv
|
|
|
|
on ws.WorkSheetId=wv.WorkSheetId
|
|
|
|
|
|
|
|
) as t
|
|
|
|
left join #receiv r on r.WorksheetId=t.WorkSheetId
|
|
|
|
left join (
|
|
|
|
select distinct ServiceType,ServiceTypeAlias from
|
|
|
|
QuickTeam.ServiceTypeTaskName) s
|
|
|
|
on t.ServiceType=s.ServiceType
|
|
|
|
left join QuickTeam.WorkSheetReceiveStatus rs on t.receiveStatus=rs.statusid
|
|
|
|
left join (SELECT [VersionId]
|
|
|
|
,sum([Effort]) [Effort]
|
|
|
|
FROM [QuickTeam].[QuickTeam].[WorkSheetTask] group by VersionId) e on t.VersionId=e.VersionId
|
|
|
|
left join (SELECT [VersionId]
|
|
|
|
,sum([Effort]) [Effort]
|
|
|
|
FROM [QuickTeam].[QuickTeam].[WorkSheetTask] group by VersionId) f on t.CurrentVersionId=f.VersionId
|
|
|
|
where projectid=@ProjectId AND t.DeleteFlag<>1 and isReclaimed=@isReclaimed
|
|
|
|
order by Finished ,WorkSheetId,VersionId
|
|
|
|
|
|
|
|
drop table #receiv
|
|
|
|
END
|
|
|