123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- using DataTransmission.Enum;
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace DataTransmission.Joint
- {
- public class Workflow
- {
- private readonly CommonTool tool = new CommonTool();
- public DataTable GetWorkflow(string OldOrderId,string StoreCode) {
- var conn = tool.GetConSqlServer();
- var orderSql = $@"SELECT * FROM Flow_Transfer01_RunBackups FTR
- LEFT JOIN Flow_Set01_Store FSS ON FTR.FTRB_StoreID = FSS.FSL_StoreID
- LEFT JOIN Flow03_Search FS ON FTR.FTRB_FlowID = FS.FSH_FlowID
- WHERE FTRB_FlowID ='{OldOrderId}' AND FSS.FSL_Code ='{StoreCode}' ORDER BY FTRB_MoveDate ";
- return tool.GetDataTable(orderSql, conn);
- }
- public string GetWorkflowSql(DataTable data, DataRow row, string orderId, DataTable org, DataTable user, DataRow module)
- {
- var pgSql = string.Empty;
- var workflow = new Entity.Workflow();
- workflow.InitId();
- workflow.DefinitionId = module["DefinitionId"].ToString();
- workflow.ModuleId = module["Id"].ToString();
- workflow.ModuleCode = module["Code"].ToString();
- workflow.ModuleName = module["Name"].ToString();
- workflow.Title = row["FSH_Title_ys"].ToString();
- var stStep = data.AsEnumerable().OrderBy(x => x.Field<int?>("FTRB_RunID")).FirstOrDefault();
- var endStep = data.AsEnumerable().OrderByDescending(x=>x.Field<int?>("FTRB_RunID")).FirstOrDefault(x=> x.Field<string>("FTRB_ItemName").ToString() == "结束");
- var actualStep = data.AsEnumerable().FirstOrDefault(x => x.Field<int?>("FSH_AcceptBMID").ToString() == x.Field<int?>("FTRB_APBMID").ToString());
- if (row["FSH_AcceptBMID"].ToString() == Form1.CenterId)
- {
- actualStep = data.AsEnumerable().FirstOrDefault(x => x.Field<DateTime>("FSH_AcceptDate").ToString() == x.Field<DateTime>("FTRB_APDate").ToString());
- }
- //Creator
- var creator = user.AsEnumerable().FirstOrDefault(x => x.Field<int?>("oldUserId").ToString() == stStep["FTRB_MoveUserID"].ToString());
- var creatorOrg = org.AsEnumerable().FirstOrDefault(x => x.Field<int?>("oldBmid").ToString() == creator["OrgId"].ToString());
- workflow.EndTime = DateTime.Parse(endStep["FTRB_DisposeDate"].ToString());
- workflow.ActualHandleStepCode = "";
- workflow.ActualHandleStepName = "";
- workflow.ActualHandleStepId = actualStep["FSH_RunID"].ToString();
- workflow.ActualOpinion = actualStep["FTRB_RRemark"].ToString();
- workflow.ExternalId = row["FSH_FlowID"].ToString();
- workflow.CreationTime = DateTime.Parse(stStep["FSH_AddDate"].ToString());
- if (creator != null)
- {
- workflow.CreatorId = creator["Id"].ToString();
- workflow.CreatorName = creator["Name"].ToString();
- }
- if (creatorOrg != null)
- {
- workflow.CreatorOrgId = creatorOrg["Id"].ToString();
- workflow.CreatorOrgName = creatorOrg["Name"].ToString();
- workflow.CreatorOrgLevel = int.Parse(creatorOrg["Level"].ToString());
- workflow.AreaId = creatorOrg["AreaId"].ToString();
- //workflow.AssignerOrgIsCenter = bool.Parse(creatorOrg["IsCenter"].ToString());
- }
- if (workflow.ModuleCode == "OrderHandle")
- {
- workflow.FlowType = EFlowType.Handle;
- workflow.ReviewResult = EReviewResult.Unknown;
- }
- else {
- workflow.FlowType = EFlowType.Handle;
- workflow.ReviewResult = EReviewResult.Approval;
- }
- var order = 1;
- foreach (DataRow item in data.Rows) {
-
- var start = order == 1;
- var end = order == data.Rows.Count;
- var stepSql = GetWorkflowStepSql(item, org, user, start, end, ref workflow);
- pgSql += stepSql ;
- order++;
- }
- var sql = $@"INSERT INTO ""public"".""workflow"" (""Id"", ""DefinitionId"", ""ModuleId"", ""ModuleName"", ""ModuleCode"", ""Title"", ""Status"",
- ""ActualOpinion"", ""IsInCountersign"", ""AllDuration"", ""ExternalId"", ""HandlerUsers"", ""HandlerOrgs"", ""FlowedOrgIds"", ""FlowedUserIds"", ""CreationTime"",
- ""CreatorId"", ""CreatorName"", ""CreatorOrgId"", ""CreatorOrgName"", ""CreatorOrgLevel"", ""AreaId"", ""FlowType"", ""ReviewResult"")
- VALUES ('{workflow.Id}', '{workflow.DefinitionId}', '{workflow.ModuleId}', '{workflow.ModuleName}', '{workflow.ModuleCode}', '{workflow.Title}', 20,
- '{workflow.ActualOpinion}', 'f', '0', '{workflow.ExternalId}', '[]', '[]', '[]', '[]', '{workflow.CreationTime.ToString()}',
- '{workflow.CreatorId}', '{workflow.CreatorName}', '{workflow.CreatorOrgId}', '{workflow.CreatorOrgName}', {workflow.CreatorOrgLevel}, '{workflow.AreaId}', {(int)workflow.FlowType}, {(int)workflow.ReviewResult});";
-
- return pgSql;
- }
- /// <summary>
- /// 生成流程
- /// </summary>
- /// <param name="item"></param>
- /// <param name="org"></param>
- /// <param name="user"></param>
- /// <param name="start"></param>
- /// <param name="end"></param>
- /// <param name="workflow"></param>
- /// <returns></returns>
- private string GetWorkflowStepSql(DataRow item, DataTable org, DataTable user,bool start,bool end, ref Entity.Workflow workflow) {
- //Acceptor
- var acceptor = user.AsEnumerable().FirstOrDefault(x => x.Field<int?>("oldUserId").ToString() == item["FTRB_APUserID"].ToString());
- var acceptorOrg = org.AsEnumerable().FirstOrDefault(x => x.Field<int?>("oldBmid").ToString() == item["FTRB_APBMID"].ToString());
- //Handler
- var handler = user.AsEnumerable().FirstOrDefault(x => x.Field<int?>("oldUserId").ToString() == item["FTRB_UserID"].ToString());
- var handlerOrg = org.AsEnumerable().FirstOrDefault(x => x.Field<int?>("oldBmid").ToString() == handler["OrgId"].ToString());
- //Creator
- var creator = user.AsEnumerable().FirstOrDefault(x => x.Field<int?>("oldUserId").ToString() == item["FTRB_MoveUserID"].ToString());
- var creatorOrg = org.AsEnumerable().FirstOrDefault(x => x.Field<int?>("oldBmid").ToString() == creator["OrgId"].ToString());
- var step = new Entity.WorkflowStep();
- step.InitId();
- step.PrevStepId = item["FTRB_PRunID"].ToString();
- step.PrevStepCode = string.Empty;
- step.AcceptorId = item["FTRB_APUserID"].ToString();
- if (acceptor != null) {
- step.AcceptorId = acceptor["Id"].ToString();
- step.AcceptorName = acceptor["Name"].ToString();
- }
- step.AcceptorOrgId = item["FTRB_APBMID"].ToString();
- if (acceptorOrg != null) {
- step.AcceptorOrgId = acceptorOrg["Id"].ToString();
- step.AcceptorOrgName = acceptorOrg["Name"].ToString();
- step.AcceptorOrgAreaCode = acceptorOrg["AreaCode"].ToString();
- step.AcceptorOrgAreaName = acceptorOrg["AreaName"].ToString();
- }
- step.AcceptTime = DateTime.Parse(item["FTRB_APDate"].ToString());
- step.HandlerId = item["FTRB_UserID"].ToString();
- if (handler != null)
- {
- step.HandlerId = handler["Id"].ToString();
- step.HandlerName = handler["Name"].ToString();
- }
- if (handlerOrg != null)
- {
- step.HandlerOrgId = handlerOrg["Id"].ToString();
- step.HandlerOrgName = handlerOrg["Name"].ToString();
- step.HandlerOrgAreaCode = handlerOrg["AreaCode"].ToString();
- step.HandlerOrgAreaName = handlerOrg["AreaName"].ToString();
- step.HandlerOrgIsCenter =bool.Parse(handlerOrg["IsCenter"].ToString());
- }
- step.HandleTime = DateTime.Parse(item["FTRB_DisposeDate"].ToString());
- step.Name = item["FTRB_ItemName"].ToString();
- step.StepType = start ? Enum.EStepType.Start : end ? Enum.EStepType.End : Enum.EStepType.Normal;
- step.BusinessType = item["FTRB_ItemName"].ToString().Contains("话务") ? EBusinessType.Seat : item["FTRB_ItemName"].ToString().Contains("派单") ? EBusinessType.Send :
- item["FTRB_ItemName"].ToString().Contains("结束") || item["FTRB_ItemName"].ToString().Contains("发布") || item["FTRB_ItemName"].ToString().Contains("回访") ? EBusinessType.File : EBusinessType.Department;
- step.Opinion = item["FTRB_RRemark"].ToString();
- step.StepExpiredTime = DateTime.Parse(item["FTRB_TTime"].ToString());
- step.CreationTime = DateTime.Parse(item["FTRB_MoveDate"].ToString());
- step.CreatorId = item["FTRB_MoveUserID"].ToString();
- if (creator != null )
- {
- step.CreatorId = creator["Id"].ToString();
- step.CreatorName = creator["Name"].ToString();
- }
- if (creatorOrg != null)
- {
- step.CreatorOrgId = creatorOrg["Id"].ToString();
- step.CreatorOrgName = creatorOrg["Name"].ToString();
- step.CreatorOrgLevel =int.Parse(creatorOrg["Level"].ToString());
- step.AreaId = creatorOrg["AreaId"].ToString();
- step.AssignerOrgIsCenter = bool.Parse(creatorOrg["IsCenter"].ToString());
- }
- step.ExternalId = workflow.ExternalId;
- var stepSql = $@"INSERT INTO ""public"".""workflow_step"" (
- ""Id"", ""NextSteps"", ""PrevStepId"", ""PrevStepCode"", ""IsMain"", ""Status"", ""IsOrigin"", ""CountersignId"",""CountersignPosition"",
- ""IsStartedCountersignEnd"", ""StartCountersignId"", ""IsCountersignEndStep"", ""CountersignStartStepId"", ""WorkflowId"", ""FlowAssignType"", ""Handlers"", ""PrevChosenStepCode"",
- ""AcceptorId"", ""AcceptorName"", ""AcceptorOrgId"", ""AcceptorOrgName"", ""AcceptorOrgAreaCode"", ""AcceptorOrgAreaName"", ""AcceptTime"", ""HandlerId"", ""HandlerName"", ""HandlerOrgId"",
- ""HandlerOrgIsCenter"", ""HandlerOrgName"", ""HandlerOrgAreaCode"", ""HandlerOrgAreaName"", ""HandleTime"", ""Name"", ""Code"", ""StepType"",
- ""BusinessType"", ""HandlerType"", ""CanReject"",""ExecuteMode"", ""CanStartCountersign"", ""NextHandlers"", ""BackToCountersignEnd"", ""IsSms"", ""Opinion"", ""StepExpiredTime"",
- ""IsStartCountersign"", ""CreationTime"", ""CreatorId"", ""CreatorName"", ""CreatorOrgId"", ""CreatorOrgName"", ""CreatorOrgLevel"", ""AreaId"", ""FlowDirection"", ""FileJson"",
- ""IsActualHandled"", ""ModuleId"", ""ModuleName"", ""ModuleCode"", ""ExpiredStatus"", ""CountersignSteps"", ""ExternalId"", ""PrevStepName"", ""AssignerId"", ""AssignerName"", ""AssignerOrgId"", ""AssignerOrgName"", ""AssignerOrgIsCenter"", ""HandleMode"", ""ReviewResult"")
- VALUES ('{step.Id}', '[]', '{step.PrevStepId}', '{step.PrevStepCode}', 'f', 2, 'f', NULL, 0,
- 'f', NULL, 'f', NULL, '{workflow.Id}', 1, '[]', NULL,
- '{step.AcceptorId}', '{step.AcceptorName}', '{step.AcceptorOrgId}', '{step.AcceptorOrgName}', '{step.AcceptorOrgAreaCode}', '{step.AcceptorOrgAreaName}', '{step.AcceptTime.ToString()}', '{step.HandlerId}', '{step.HandlerName}', '{step.HandlerOrgId}',
- '{step.HandlerOrgIsCenter.ToString()}', '{step.HandlerOrgName}', {step.HandlerOrgAreaCode}, '{step.HandlerOrgAreaName}', '{step.HandleTime.ToString()}', '{step.Name}', '', {(int)step.StepType},
- {(int)step.BusinessType}, 3, 'f', 0, 'f', '[]', 'f', 'f', '{step.Opinion}', '{step.StepExpiredTime.ToString()}',
- 'f', '{step.CreationTime.ToString()}', '{step.CreatorId}', '{step.CreatorName}', '{step.CreatorOrgId}', '{step.CreatorOrgName}', {step.CreatorOrgLevel}, '{step.AreaId}', NULL, NULL,
- 'f', '08db8db3-eea4-4737-88dd-6c7b990c7705', '工单办理', 'OrderHandle', 0, '[]', '{step.ExternalId}', '', '{step.CreatorId}', '{step.CreatorName}', '{step.CreatorOrgId}', '{step.CreatorOrgName}', '{step.AssignerOrgIsCenter.ToString()}', 0, 0);";
- var traceSql = GetWorkflowTraceSql(item, step, org, user, start, end, ref workflow);
- return stepSql + traceSql;
- }
- /// <summary>
- /// 生成快照
- /// </summary>
- /// <param name="item"></param>
- /// <param name="step"></param>
- /// <param name="org"></param>
- /// <param name="user"></param>
- /// <param name="start"></param>
- /// <param name="end"></param>
- /// <param name="workflow"></param>
- /// <returns></returns>
- private string GetWorkflowTraceSql(DataRow item, Entity.WorkflowStep step , DataTable org, DataTable user, bool start, bool end, ref Entity.Workflow workflow)
- {
- var trace = new Entity.WorkflowTrace();
- trace.InitId();
- var traceSql = $@"INSERT INTO ""public"".""workflow_trace"" (""Id"", ""StepId"", ""Status"", ""ParentId"", ""WorkflowId"", ""FlowAssignType"", ""Handlers"", ""PrevChosenStepCode"", ""AcceptorId"", ""AcceptorName"",
- ""AcceptorOrgId"", ""AcceptorOrgName"", ""AcceptorOrgAreaCode"", ""AcceptorOrgAreaName"", ""AcceptTime"", ""HandlerId"", ""HandlerName"", ""HandlerOrgId"",
- ""HandlerOrgIsCenter"", ""HandlerOrgName"",""HandlerOrgAreaCode"", ""HandlerOrgAreaName"", ""HandleTime"", ""Name"", ""Code"", ""StepType"", ""BusinessType"",
- ""HandlerType"", ""CanReject"", ""ExecuteMode"", ""CanStartCountersign"", ""NextHandlers"", ""BackToCountersignEnd"", ""IsSms"", ""Opinion"", ""StepExpiredTime"",
- ""IsStartCountersign"", ""CreationTime"", ""CreatorId"", ""CreatorName"", ""CreatorOrgId"", ""CreatorOrgName"", ""CreatorOrgLevel"", ""AreaId"", ""FlowDirection"", ""FileJson"",
- ""IsActualHandled"", ""ModuleId"", ""ModuleName"", ""ModuleCode"", ""ExpiredStatus"", ""ExternalId"", ""TraceType"", ""NextSteps"", ""PrevStepId"", ""PrevStepCode"", ""IsMain"", ""IsOrigin"", ""CountersignId"",
- ""CountersignPosition"", ""CountersignSteps"", ""StartCountersignId"", ""IsStartedCountersignEnd"", ""IsCountersignEndStep"", ""CountersignStartStepId"", ""SendHandleTimes"", ""RoleId"", ""RoleName"", ""TraceState"",
- ""Remark"", ""TraceStyle"", ""OrderPublishId"", ""OrderVisitId"", ""PrevStepName"", ""AssignerId"", ""AssignerName"", ""AssignerOrgId"", ""AssignerOrgName"", ""AssignerOrgIsCenter"", ""HandleMode"", ""ReviewResult"")
- VALUES ('{trace}', '{step}', 2, NULL, '{workflow.Id}', 1, '[]', NULL, '{step.AcceptorId}', '{step.AcceptorName}',
- '{step.AcceptorOrgId}', '{step.AcceptorOrgName}', '{step.AcceptorOrgAreaCode}', '{step.AcceptorOrgAreaName}', '{step.AcceptTime.ToString()}', '{step.HandlerId}', '{step.HandlerName}', '{step.HandlerOrgId}',
- '{step.HandlerOrgIsCenter.ToString()}', '{step.HandlerOrgName}', '{step.HandlerOrgAreaCode}', '{step.HandlerOrgAreaName}', '{step.HandleTime.ToString()}', '{step.Name}', '', {(int)step.StepType}, {(int)step.BusinessType},
- 3, 'f', 0, 'f', '[]', 'f', 'f', '{step.Opinion}', '{step.StepExpiredTime.ToString()}',
- 'f', '{step.CreationTime.ToString()}', '{step.CreatorId}', '{step.CreatorName}', '{step.CreatorOrgId}', '{step.CreatorOrgName}', {step.CreatorOrgLevel}, '{step.AreaId}', NULL, '[]',
- 'f', '08db8db3-eea4-4737-88dd-6c7b990c7705', '工单办理', 'OrderHandle', 0, '{step.ExternalId}', 1, '[]', '{step.PrevStepId}', NULL, 'f', 'f', '',
- 0, '[]', NULL, 'f', 'f', '', 0, NULL, NULL, 0,
- NULL, 0, NULL, NULL, NULL, '{step.CreatorId}', '{step.CreatorName}', '{step.CreatorOrgId}', '{step.CreatorOrgName}', '{step.AssignerOrgIsCenter.ToString()}', NULL, 0);";
- return traceSql;
- }
- }
- }
|