You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

334 lines
16 KiB
C#

using System;
using System.Data;
using DSWeb.Models;
using DSWeb.EntityDA;
using System.Collections;
using System.Collections.Generic;
namespace DSWeb.WorkFlow
{
public class WorkFlowHelper
{
private WorkFlowEntity _workFlowEntity;
public WorkFlowHelper()
{
}
#region 通过模块NAME获取工作流信息
/// <summary>
/// 通过模块NAME获取工作流信息
/// </summary>
/// <param name="moduleName">模块NAME</param>
/// <returns></returns>
public WorkFlowEntity FindWorkFlow(WorkFlowType tempWorkFlowType,string tempCompanyID)
{
if (_workFlowEntity == null)
{
WorkFlowDA workFlowDA = new WorkFlowDA();
int iType = 0;
switch (tempWorkFlowType)
{
case WorkFlowType.FEEAUDIT:
iType = 1;
break;
case WorkFlowType.PAYSETTLEAUDIT:
iType = 2;
break;
case WorkFlowType.FEEMODIFYAUDIT:
iType = 3;
break;
case WorkFlowType.SeaiFEEAUDIT:
iType = 11;
break;
case WorkFlowType.SeaiPAYSETTLEAUDIT:
iType = 12;
break;
case WorkFlowType.SeaiFEEMODIFYAUDIT:
iType = 13;
break;
case WorkFlowType.WmsOutFEEAUDIT:
iType = 21;
break;
case WorkFlowType.WmsOutPAYSETTLEAUDIT:
iType = 22;
break;
case WorkFlowType.WmsOutFEEMODIFYAUDIT:
iType = 23;
break;
case WorkFlowType.WmszxPAYSETTLEAUDIT:
iType = 61;
break;
case WorkFlowType.tMsWlPAYSETTLEAUDIT:
iType = 51;
break;
case WorkFlowType.FeeOpSeanRecvPayAudit:
iType=72;
break;
case WorkFlowType.FeeOpSeanSettleAudit:
iType = 71;
break;
case WorkFlowType.SEANFEEMODIFYAUDIT:
iType = 73;
break;
case WorkFlowType.FeeSeaAllPaySettleAudit:
iType = 74;
break;
case WorkFlowType.APPLYFEEAUDIT:
iType = 101;
break;
case WorkFlowType.APPLYPAYSETTLEAUDIT:
iType = 102;
break;
case WorkFlowType.APPLYFEEMODIFYAUDIT:
iType = 103;
break;
case WorkFlowType.BULKFEEAUDIT:
iType = 104;
break;
case WorkFlowType.BULKPAYSETTLEAUDIT:
iType = 105;
break;
case WorkFlowType.BULKFEEMODIFYAUDIT:
iType = 106;
break;
case WorkFlowType.FeeOpOtherRecvPayAudit:
iType = 82;
break;
}
try
{
//根据工作流类型获取工作流信息
_workFlowEntity = workFlowDA.GetSingleWorkFlowByTypeNo(iType, tempCompanyID);
if (_workFlowEntity.WorkFlowSteps == null)
{
WorkFlowStepDA workFlowStepDA = new WorkFlowStepDA();
//获取工作流所有步骤信息
if (_workFlowEntity.GID != null)
{
_workFlowEntity.WorkFlowSteps = workFlowStepDA.GetWorkFlowSteps(_workFlowEntity.GID);
for (int i = 0; i < _workFlowEntity.WorkFlowSteps.Count; i++)
{
if (_workFlowEntity.WorkFlowSteps[i].ConditionID != null)
{
WorkFlowConditionDA workFlowConditionDA = new WorkFlowConditionDA();
//根据工作流条件Gid返回工作流条件信息
_workFlowEntity.WorkFlowSteps[i].WorkFlowCondition = workFlowConditionDA.GetWorkFlowCondition(_workFlowEntity.WorkFlowSteps[i].ConditionID);
}
}
}
else
{
_workFlowEntity = null;
}
}
}
catch (Exception)
{
_workFlowEntity = null;
return _workFlowEntity;
}
}
return _workFlowEntity;
}
#endregion
#region 注释
//public int GetWorkFlowStepOperatorRange(string strUserID)
//{
// string strResult = "0";
// if (_workFlowEntity != null)
// {
// if (_workFlowEntity.GID != null)
// {
// WorkFlowDoEntity workFlowDoEntity = null;
// WorkFlowDoDA workFlowDoDA = new WorkFlowDoDA();
// workFlowDoEntity = workFlowDoDA.GetSigleWorkFlowDoByAuditor(_workFlowEntity.GID, strUserID);
// if (workFlowDoEntity != null)
// {
// if (workFlowDoEntity.GID != null)
// {
// //遍历所有工作流下步骤,获取第一步骤GID信息
// foreach (WorkFlowStepEntity step in workFlowEntity.WorkFlowSteps)
// {
// }
// }
// }
// }
// }
// return strResult;
//}
#endregion
#region 顺序执行工作流步骤(审核通过)
/// <summary>
/// 顺序执行工作流步骤(审核通过)
/// </summary>
/// <param name="tempWorkFlowDoEntity">审核步骤DO信息实体类</param>
/// <returns>值1执行成功 值不等于1执行失败</returns>
public int DoWorkFlowStep(WorkFlowDoEntity tempWorkFlowDoEntity,WorkFlowEntity workFlowEntity)
{
int iResult = 0;
if (workFlowEntity != null)//_workFlowEntity
{
WorkFlowDA workFlowDA = new WorkFlowDA();
WorkFlowDoDA workFlowDoDA = new WorkFlowDoDA();
IList<WorkFlowDoEntity> workFlowDoEntities = new List<WorkFlowDoEntity>();
IList<WorkFlowDoEntity> nextWorkFlowDoEntities = new List<WorkFlowDoEntity>();
int iStepNO = 0;
bool isLastStep = false;
foreach (WorkFlowStepEntity step in workFlowEntity.WorkFlowSteps)//_workFlowEntity
{
//先判断当前工作流是否是最后一步,如果是最后一步则只更新ISFINISH字段,不再预先插入下一步信息
if (step.GID == tempWorkFlowDoEntity.StepID)
{
if (step.IsLast)
{
isLastStep = true;
tempWorkFlowDoEntity.IsFinish = true;
workFlowDoEntities.Add(tempWorkFlowDoEntity);
iResult = workFlowDoDA.UpdateWorkFlowDoStep(workFlowDoEntities, nextWorkFlowDoEntities, isLastStep, workFlowEntity.WorkFlowSteps);//_workFlowEntity
}
else
{
iStepNO = step.StepNO + 1;
foreach (WorkFlowStepEntity nextStep in workFlowEntity.WorkFlowSteps)//_workFlowEntity
{
if (nextStep.StepNO == iStepNO)
{
if (!nextStep.IsDepartment)
{
//先把当前审核人通过审核状态更新到ISFINISH字段
tempWorkFlowDoEntity.IsFinish = true;
//然后插入一条新的记录到workflow_do表,主要是下一步骤审核信息
WorkFlowDoEntity nextWorkFlowDoEntity = new WorkFlowDoEntity();
nextWorkFlowDoEntity.GID = Guid.NewGuid().ToString();
nextWorkFlowDoEntity.BillNO = tempWorkFlowDoEntity.BillNO;
nextWorkFlowDoEntity.WorkFlowID = tempWorkFlowDoEntity.WorkFlowID;
nextWorkFlowDoEntity.StepID = nextStep.GID;
nextWorkFlowDoEntity.StepNO = nextStep.StepNO;
nextWorkFlowDoEntity.Auditor = nextStep.Auditor;
nextWorkFlowDoEntity.BSNO = tempWorkFlowDoEntity.BSNO;
nextWorkFlowDoEntity.FeeID = tempWorkFlowDoEntity.FeeID;
nextWorkFlowDoEntity.FeeStatus = tempWorkFlowDoEntity.FeeStatus;
nextWorkFlowDoEntity.DoQuerySql = tempWorkFlowDoEntity.DoQuerySql;
nextWorkFlowDoEntity.IsFinish = false;
nextWorkFlowDoEntity.Applicant = tempWorkFlowDoEntity.Applicant;
workFlowDoEntities.Add(tempWorkFlowDoEntity);
nextWorkFlowDoEntities.Add(nextWorkFlowDoEntity);
}
else
{
string strDepartmentID = step.DepartmentID == null?"":step.DepartmentID;
if (strDepartmentID.Trim() != null)
{
SysDeptDA sysDeptDA = new SysDeptDA();
string strDeptID = sysDeptDA.GetDepartmentIdByUser(nextStep.Auditor);
if (strDeptID.Trim().Equals(strDepartmentID) && strDepartmentID != "")
{
}
}
//先把当前审核人通过审核状态更新到ISFINISH字段
tempWorkFlowDoEntity.IsFinish = true;
//然后插入一条新的记录到workflow_do表,主要是下一步骤审核信息
WorkFlowDoEntity nextWorkFlowDoEntity = new WorkFlowDoEntity();
nextWorkFlowDoEntity.GID = Guid.NewGuid().ToString();
nextWorkFlowDoEntity.BillNO = tempWorkFlowDoEntity.BillNO;
nextWorkFlowDoEntity.WorkFlowID = tempWorkFlowDoEntity.WorkFlowID;
nextWorkFlowDoEntity.StepID = nextStep.GID;
nextWorkFlowDoEntity.StepNO = nextStep.StepNO;
nextWorkFlowDoEntity.Auditor = nextStep.Auditor;
nextWorkFlowDoEntity.BSNO = tempWorkFlowDoEntity.BSNO;
nextWorkFlowDoEntity.FeeID = tempWorkFlowDoEntity.FeeID;
nextWorkFlowDoEntity.FeeStatus = tempWorkFlowDoEntity.FeeStatus;
nextWorkFlowDoEntity.DoQuerySql = tempWorkFlowDoEntity.DoQuerySql;
nextWorkFlowDoEntity.IsFinish = false;
nextWorkFlowDoEntity.Applicant = tempWorkFlowDoEntity.Applicant;
workFlowDoEntities.Add(tempWorkFlowDoEntity);
nextWorkFlowDoEntities.Add(nextWorkFlowDoEntity);
}
}
}
}
}
}
//将更新和插入操作对象加入到实体类组内
if (workFlowDoEntities.Count >= 1)
{
iResult = workFlowDoDA.UpdateWorkFlowDoStep(workFlowDoEntities, nextWorkFlowDoEntities, false, workFlowEntity.WorkFlowSteps);//_workFlowEntity
}
}
return iResult;
}
#endregion
#region 工作流审核步骤驳回
/// <summary>
/// 工作流审核步骤驳回
/// </summary>
/// <param name="workFlowDoEntity">工作流DO实体类</param>
/// <param name="workFlowType">工作流类型</param>
/// <param name="feeDoEntities">FeeDo数据集</param>
/// <param name="tempBillNO">编号</param>
/// <param name="tempCompanyID">分公司GID</param>
/// <returns>值1工作流审核步骤驳回成功 值不等于1工作流步骤驳回失败</returns>
public int DoWorkFlowReject(WorkFlowDoEntity workFlowDoEntity,WorkFlowType workFlowType,IList<FeeDoEntity> feeDoEntities,string tempBillNO,string tempCompanyID)
{
int iResult = 0;
//当某一审核工作流步骤审核人提出驳回申请后,先记录哪个步骤驳回,然后将所有审核步骤信息置删除位
if (_workFlowEntity != null)
{
WorkFlowDA workFlowDA = new WorkFlowDA();
WorkFlowDoDA workFlowDoDA = new WorkFlowDoDA();
iResult = workFlowDoDA.ExcuteRejectWorkFlowDo(workFlowDoEntity, workFlowType, feeDoEntities, tempBillNO,tempCompanyID);
}
return iResult;
}
#endregion
}
public enum WorkFlowType
{
FEEAUDIT = 1,//应收应付费用审核
PAYSETTLEAUDIT = 2,//付费审核
FEEMODIFYAUDIT = 3,//费用更改审核
SeaiFEEAUDIT = 11,//海运进口应收应付费用审核
SeaiPAYSETTLEAUDIT = 12,//海运进口付费审核
SeaiFEEMODIFYAUDIT = 13,//海运进口费用更改审核
WmsOutFEEAUDIT = 21,//海运进口应收应付费用审核
WmsOutPAYSETTLEAUDIT = 22,//海运进口付费审核
WmsOutFEEMODIFYAUDIT = 23,//海运进口费用更改审核
WmszxPAYSETTLEAUDIT = 61,//仓储付费用审核
tMsWlPAYSETTLEAUDIT = 51,//陆运付费用审核
FeeOpSeanRecvPayAudit=72,//内贸海运应收应付费用审核
FeeOpSeanSettleAudit=71,//内贸海运付费用审核
SEANFEEMODIFYAUDIT=73,//内贸海运费用申请更改审核
FeeSeaAllPaySettleAudit = 74,//全部付费用审核20130913
APPLYFEEAUDIT =101,//应收应付费用审核
APPLYPAYSETTLEAUDIT =102,//付费审核
APPLYFEEMODIFYAUDIT =103,//费用更改审核
BULKFEEAUDIT = 104,//应收应付费用审核
BULKPAYSETTLEAUDIT = 105,//付费审核
BULKFEEMODIFYAUDIT = 106,//费用更改审核
FeeOpOtherRecvPayAudit = 82,//散杂运输_应收应付费用审核
//import_main = 12,//进口贸易 20131221
}
}